我想显示这样的列:
ProductID | Price | PricingPlanLicense | PricingPlanQuality
----------+-------+--------------------+-------------------
1 16.99 Buy HD
1 12.99 Buy SD
1 2.99 Rent HD
3 4.99 Rent HD
问题是,在我的数据中,我有多个PricingPlanLicense
和PricingPlanQuality
组合,我想选择价格最高的那个。
到目前为止,我有这个问题:
SELECT
ProductID, MAX(Price), PricingPlanLicense, PricingPlanQuality
FROM
[#ExportPricingTable]
GROUP BY
PricingPlanLicense, PricingPlanQuality
但这不起作用,因为ProductID
未聚合,我如何告诉SQL Server使用已存在的ProductID
?
由于
答案 0 :(得分:1)
这样做的规范方法是使用联接来获取与每个具有最高价格的组相对应的ProductID
:
SELECT t1.ProductID, t1.Price, t1.PricingPlanLicense, t1.PricingPlanQuality
FROM [#ExportPricingTable] t1
INNER JOIN
(
SELECT MAX(Price) AS maxPrice, PricingPlanLicense, PricingPlanQuality
FROM [#ExportPricingTable]
GROUP BY PricingPlanLicense, PricingPlanQuality
) t2
ON t1.Price = t2.maxPrice AND t1.PricingPlanLicense = t2.PricingPlanLicense AND
t1.PricingPlanQuality = t2.PricingPlanQuality
以下是您可以尝试的演示:
答案 1 :(得分:1)
将ProductID
添加到Group By
子句。
SELECT ProductID, MAX(Price), PricingPlanLicense, PricingPlanQuality
FROM [#ExportPricingTable]
GROUP BY ProductID, PricingPlanLicense, PricingPlanQuality
答案 2 :(得分:0)
您可以使用MAX
或SELECT MIN(ProductID), MAX(Price), PricingPlanLicense, PricingPlanQuality
FROM [#ExportPricingTable]
GROUP BY PricingPlanLicense, PricingPlanQuality
选择一个ID,例如:
ProductID
这将为每个PricingPlanLicense, PricingPlanQuality
值组选择最小async()
值。
答案 3 :(得分:0)
如果要为聚合选择多于列的列,可以使用row_number()对数据进行排序,然后选择第一行:
SELECT * FROM (
SELECT ProductID, Price, PricingPlanLicense, PricingPlanQuality
ROW_NUMBER() OVER (partition by PricingPlanLicense, PricingPlanQuality ORDER BY Price desc) RN
FROM [#ExportPricingTable]
)
WHERE RN = 1