例如我有这张表:
itemgroup |描述|价格
A,a,10
A,b,12
A,c,14
B,g,11
B,h,16
现在我想在一个组中选择价格最高的行,如下所示:
A,c,14
B,h,16
SQL查询(完全正常)让我接近这个:
SELECT itemgroup, MAX( price )
FROM table
GROUP BY itemgroup
A,14
B,16
通过尝试这个我得到一个“不是GROUP BY表达式”-error:
SELECT itemgroup, description, MAX( price )
FROM table
GROUP BY itemgroup
我需要像这样的伪查询:
SELECT itemgroup, IGNORE( description), MAX( price )
FROM table
GROUP BY itemgroup
我希望我能解释一下我的小问题。
答案 0 :(得分:10)
我通常会做类似的事情:
SELECT t1.itemgroup, t1.description, t1.price
FROM table t1,
(SELECT itemgroup, MAX( price ) as price
FROM table
GROUP BY itemgroup) t2
WHERE t1.itemgroup = t2.itemgroup
AND t1.price = t2.price
答案 1 :(得分:5)
使用分析函数:
SELECT itemgroup, description, price FROM
(select itemgroup, description, price, RANK()
OVER (PARTITION BY itemgroup ORDER BY max(price) DESC) as rank
FROM group by itemgroup,description,price)a
WHERE a.rank = 1
ORDER BY itemgroup;
分析功能有很多功能 - 学习它们可以在很多情况下帮助你。