общее количество записей после выбора groupBy - PullRequest
15 голосов
/ 23 апреля 2010

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

спасибо.

Ответы [ 3 ]

25 голосов
/ 07 апреля 2011

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

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

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

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

10 голосов
/ 23 апреля 2010

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

SELECT <your_complicated_query>;
SELECT FOUND_ROWS();

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

2 голосов
/ 23 апреля 2010

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

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

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
...