我有一个包含硬件项目的表。该项目及其制造商与价格一起包含在表格中。我需要退回制造商的名字,当其中一个项目比另一个项目更贵时。
例如,在下表中,我只想在10mm的成本高于5mm时返回制造商的名称。
表格
╔══════════════╦══════╦═══════╗
║ Manufacturer ║ Size ║ Cost ║
╠══════════════╬══════╬═══════╣
║ Acme ║ 5mm ║ 10.00 ║
║ Acme ║ 10mm ║ 20.00 ║
║ AAA ║ 5mm ║ 15.00 ║
║ AAA ║ 10mm ║ 14.00 ║
║ BBB ║ 5mm ║ 17.00 ║
║ BBB ║ 10mm ║ 20.00 ║
╚══════════════╩══════╩═══════╝
这个例子,我只想退回那些价格较高的10毫米物品的制造商。所以上面的表只返回2行:
所需输出
Acme
BBB
答案 0 :(得分:3)
您可以像这样使用GROUP BY
SELECT Manufacturer
FROM Tbl
GROUP BY Manufacturer
HAVING MAX(CASE WHEN Size = '10mm' THEN Cost END) > MAX(CASE WHEN Size = '5mm' THEN Cost END)
答案 1 :(得分:0)
您可以使用row_number
窗口功能:
select * from
(select *, row_number() over(partition by Manufacturer order by Cost desc) rn
from TableName) t
where rn = 1 and size = 10