假设您有一个名为 ProductsTable 的表,其结构如下:
ProductID: int (key)
ProductDesc: varchar
Price: int
现在,假设所有行中的 ProductDesc 可以相等。因此,您可以有两种同名的产品,例如“APPLE”。然而,它们的价格可能不同。(这最终对我们的设计来说是有意义的,因为我没有提到很多其他列有其他数据,所以价格和描述可能是相同的,但其他元素产品不同。)
我只是想找到所有ProductID,其中ProductDesc在所有产品中都相同,并且价格对于所有产品都相同。换句话说,同一产品的价格不会改变。我想找到任何没有可变价格的产品。
Apple 5.0
Apple 5.0
Apple 5.0
Pear 3.0
Pear 4.0
在上面的数据示例中,我将仅返回与 Apple 相对应的 ProductId,而不返回 Pear,因为 Pear 的价格在条目之间会发生变化。
我认为这需要 CTE 和/或 StdDev 的一些用法,但我不确定如何将语法组合在一起。这是我对伪代码的尝试:
SELECT a.* FROM ProductsTable a WHERE a.Price = (SELECT b.ProductPrice FROM ProductsTable b WHERE b.ProductDesc LIKE a.ProductDesc)
但我认为这只会比较前两行。我想找到具有相同产品描述的all行之间根本没有不同价格的所有产品。
可能会选择价格不变的产品ID,然后获取有关这些ID的信息,例如:
SELECT a.* FROM ProductsTable a
WHERE a.ProductID IN (
SELECT ProductID FROM ProductsTable
GROUP BY ProductID
HAVING MIN(Price) = MAX(Price))