SQL

как в PostgreSQL(!) сделать группировку по одному полю но вывести в результат остальные поля из таблицы

проблема в том что на такой запрос ругается на то что id не указано в GROUP BY

SELECT id, ProductCount, COUNT(*) AS ModelsCount
FROM Products
GROUP BY ProductCount;
а если я не хочу группировать по id но в результатах группировке оно мне нужно - как вывести ?
Sergei Beliy
Sergei Beliy
59 848
select остальные поля from
(select id, ProductCount, COUNT(*) AS ModelsCount
FROM Products
GROUP BY ProductCount;)
Владимир Сырвачев
Владимир Сырвачев
17 648
Лучший ответ
PostgreSQL тут вообще ни при чем, это общая теория множеств.
Чего именно ты хочешь добиться своей группировкой? Группировка применяется вместе с соотв. функциями. Ты разбиваешь некоторое множество на группы и по каждой из групп собираешь некоторую статистику. Для разбиения на группы нужно перечислить поля, по которым это разбиение осуществляется. Таким образом ты создашь новое множество. Все остальные поля из старого множества в нем участвовать не могут принципиально.
А если значения этих "остальных полей" в разных строках, попавших в одну группу, различаются? Из какой именно строки брать значения?

Смысл группировки именно в том, что в результат группировки могут попасть ТОЛЬКО значения полей из списка GROUP и значения агрегатных функций (а COUNT - это и есть одна из агрегатных функций) над ЛЮБЫМИ полями.

Так что если хочешь добавить в результат id, то придётся писать MAX(id) или MIN(id).

P.S. Это только в MySQL поиздевались над стандартом - разрешив в выдаче любые поля.
id = 1 ProductCount = 5
id = 2 ProductCount = 4
id = 3 ProductCount = 5

И что дальше???
Игорь Саватеев
Игорь Саватеев
66 137
В общем-то смысл группировки - это свертка таблицы. В результате других полей просто нет - они обрезаются. Поэтому фраза не хочу группировать, но в результате нужен - это хочу обрезать не обрезая.
Алмаз Браун
Алмаз Браун
3 697