GROUP BY игнорирует атрибут - PullRequest
       19

GROUP BY игнорирует атрибут

8 голосов
/ 19 марта 2011

например у меня есть эта таблица:

группа товаров | описание | цена
А, а, 10
А, В, 12
А, С, 14
Б, г, 11
B, ч, 16

Теперь я хочу выбрать строки с самой высокой ценой в одной группе, например:

А, с, 14
B, ч, 16

SQL-запрос (полностью функциональный), который приближает меня к следующему:

SELECT itemgroup, MAX( price ) 
FROM table
GROUP BY itemgroup

А, 14
Б, 16

Пытаясь это, я получаю ошибку «not a GROUP BY выражение»:

SELECT itemgroup, description, MAX( price ) 
FROM table
GROUP BY itemgroup

Мне нужно что-то вроде этого псевдопросмотра:

SELECT itemgroup, IGNORE( description), MAX( price ) 
FROM table
GROUP BY itemgroup

Я надеюсь, что смогу объяснить мою маленькую проблему.

Ответы [ 2 ]

10 голосов
/ 19 марта 2011

Обычно я делаю что-то вроде:

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
5 голосов
/ 19 марта 2011

Используйте аналитические функции:

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;

В аналитических функциях много силы - их изучение может помочь вам во многих ситуациях.

...