@Dark_Dante

Как заставить работать COUNT с GROUP BY?

В общем ситуация такая. Надо подсчитать количество строк в ответе запроса вида:
SELECT o.id AS cnt
FROM "order" AS o
         LEFT JOIN product p ON (p.order_id = o.id)
GROUP BY o.id
HAVING sum(p.price) >= 10


Как обычно пытаюсь это сделать через COUNT. Да не тут то было, возвращается несколько записей, типа [1, 1, ....]. Проблема я так понимаю в группировке - агрегатная функция применяется к каждой группе записей. И что то я не придумаю как это обойти и получить нормальный результат в виде INT.
Пхпшные функции типа count() не предлагать. Это же по любому можно сделать на чистом SQL.
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Надо подсчитать количество строк в ответе запроса вида

Вариантов несколько.

Первый, наиболее правильный - получить это значение отдельным запросом.
SELECT COUNT(*)  AS cnt
FROM (
    SELECT 1
    FROM "order" AS o
         LEFT JOIN product p ON (p.order_id = o.id)
    GROUP BY o.id
    HAVING sum(p.price) >= 10
) x


Второй - используя средства языка программирования или библиотеки доступа, получить количество записей в наборе записей. Обычно подобное свойство у рекордсета присутствует.

Третий - добавить соотв. поле в каждую запись выходного набора, используя оконную функцию, и взять значение из любой записи:
SELECT o.id, COUNT(o.id) OVER () AS cnt
FROM "order" AS o
         LEFT JOIN product p ON (p.order_id = o.id)
GROUP BY o.id
HAVING sum(p.price) >= 10
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы