Подсчет итоговых записей после выбора groupBy

У меня есть запрос выбора mysql, у которого есть groupBy. Я хочу считать все записи после оператора group. Есть ли способ для этого непосредственно из mysql?

спасибо.

Ответы

Ответ 1

Вы можете использовать FOUND_ROWS():

SELECT <your_complicated_query>;
SELECT FOUND_ROWS();

Он действительно предназначен для использования с LIMIT, рассказывая вам, сколько строк было бы возвращено без LIMIT, но, похоже, оно работает отлично для запросов, которые не используют LIMIT.

Ответ 2

Если вам нужно только подсчет после группировки, и вы не хотите использовать 2 отдельных запроса, чтобы найти ответ. Вы можете сделать это с помощью вспомогательного запроса, подобного этому...

select count(*) as `count`
from (
    select 0 as `doesn't matter`
    from `your_table` yt
    group by yt.groupfield
) sq

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

Примечание. Все временные таблицы должны иметь именованный псевдоним, поэтому "sq" в конце

Ответ 3

см. этот запрос для примеров:

Этот запрос используется, чтобы найти запись о доступных комнатах для отеля, просто проверьте это

SELECT a.type_id, a.type_name, a.no_of_rooms,
       (SELECT SUM(booked_rooms) FROM reservation
       WHERE room_type = a.type_id
       AND start_date >= '2010-04-12'
       AND end_date <= '2010-04-15') AS booked_rooms,
       (a.no_of_rooms - (SELECT SUM(booked_rooms)
                  FROM reservation
              WHERE room_type = a.type_id
              AND start_date >= '2010-04-12'
              AND end_date <= '2010-04-15')) AS freerooms
FROM room_type AS a
LEFT JOIN reservation AS b
ON a.type_id = b.room_type
GROUP BY a.type_id ORDER BY a.type_id