Подсчет итоговых записей после выбора 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