проблема в том что на такой запрос ругается на то что id не указано в GROUP BY
SELECT id, ProductCount, COUNT(*) AS ModelsCount
FROM Products
GROUP BY ProductCount;
а если я не хочу группировать по id но в результатах группировке оно мне нужно - как вывести ?
SQL
как в PostgreSQL(!) сделать группировку по одному полю но вывести в результат остальные поля из таблицы
select остальные поля from
(select id, ProductCount, COUNT(*) AS ModelsCount
FROM Products
GROUP BY ProductCount;)
(select id, ProductCount, COUNT(*) AS ModelsCount
FROM Products
GROUP BY ProductCount;)
PostgreSQL тут вообще ни при чем, это общая теория множеств.
Чего именно ты хочешь добиться своей группировкой? Группировка применяется вместе с соотв. функциями. Ты разбиваешь некоторое множество на группы и по каждой из групп собираешь некоторую статистику. Для разбиения на группы нужно перечислить поля, по которым это разбиение осуществляется. Таким образом ты создашь новое множество. Все остальные поля из старого множества в нем участвовать не могут принципиально.
Чего именно ты хочешь добиться своей группировкой? Группировка применяется вместе с соотв. функциями. Ты разбиваешь некоторое множество на группы и по каждой из групп собираешь некоторую статистику. Для разбиения на группы нужно перечислить поля, по которым это разбиение осуществляется. Таким образом ты создашь новое множество. Все остальные поля из старого множества в нем участвовать не могут принципиально.
А если значения этих "остальных полей" в разных строках, попавших в одну группу, различаются? Из какой именно строки брать значения?
Смысл группировки именно в том, что в результат группировки могут попасть ТОЛЬКО значения полей из списка GROUP и значения агрегатных функций (а COUNT - это и есть одна из агрегатных функций) над ЛЮБЫМИ полями.
Так что если хочешь добавить в результат id, то придётся писать MAX(id) или MIN(id).
P.S. Это только в MySQL поиздевались над стандартом - разрешив в выдаче любые поля.
Смысл группировки именно в том, что в результат группировки могут попасть ТОЛЬКО значения полей из списка GROUP и значения агрегатных функций (а COUNT - это и есть одна из агрегатных функций) над ЛЮБЫМИ полями.
Так что если хочешь добавить в результат id, то придётся писать MAX(id) или MIN(id).
P.S. Это только в MySQL поиздевались над стандартом - разрешив в выдаче любые поля.
id = 1 ProductCount = 5
id = 2 ProductCount = 4
id = 3 ProductCount = 5
И что дальше???
id = 2 ProductCount = 4
id = 3 ProductCount = 5
И что дальше???
В общем-то смысл группировки - это свертка таблицы. В результате других полей просто нет - они обрезаются. Поэтому фраза не хочу группировать, но в результате нужен - это хочу обрезать не обрезая.
Похожие вопросы
- Можно ли связать одно поле таблицы с несколькими полями другой таблицы?
- SQL. Есть таблица а и b как мне поставить ограничение на поле таблицы b, на основании поля таблицы a? пример в описании
- Postgresql Как правильно наладить связь между таблицами в базк данныъ?
- Как в одной записи таблицы хранить несколько полей одного типа (не фиксированное число)?
- PostgreSQL Extensions. С помощью модуля tablefunc получите из таблицы projects базы HR
- Зачем нужны схемы (public) в postgresql?
- Postgresql ввод данных пользователем
- PostgreSQL - концепция хранения данных
- Вопрос по SQL - уникальное поле ID для трёх таблиц (нельзя вставить значения в одну, если оно есть в другой таблице).
- Блин что то не могу найти способ произвести эффективную выборку данных из таблицы БД?