Sql 通过忽略属性进行分组
例如,我有以下表格:Sql 通过忽略属性进行分组,sql,oracle10g,sql-order-by,Sql,Oracle10g,Sql Order By,例如,我有以下表格: itemgroup | description | price 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 通过尝试此操作,我得到一个“非表达式分组”
itemgroup | description | price
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
通过尝试此操作,我得到一个“非表达式分组”-错误:
我需要这样的伪查询:
SELECT itemgroup, IGNORE( description), MAX( price )
FROM table
GROUP BY itemgroup
我希望我能解释一下我的小问题。我通常会这样做:
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
使用分析函数:
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;
分析函数非常强大,学习它们可以在很多情况下帮助您。是的,我立即删除了它,谢谢您提供的信息!
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
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;