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;