我有一个具有groupBy的mysql选择查询。 我想在group by语句后计算所有记录。 有没有办法直接从mysql?
感谢。
答案 0 :(得分:25)
如果您唯一需要的是分组后的计数,并且您不想使用2个单独的查询来查找答案。您可以使用像这样的子查询...
select count(*) as `count`
from (
select 0 as `doesn't matter`
from `your_table` yt
group by yt.groupfield
) sq
注意:您必须在子查询中实际选择一些内容,但您选择的内容无关紧要
注意:所有临时表都必须有一个命名别名,因此末尾的“sq”
答案 1 :(得分:10)
您可以使用FOUND_ROWS():
SELECT <your_complicated_query>;
SELECT FOUND_ROWS();
它真的打算与LIMIT一起使用,告诉你在没有LIMIT的情况下会返回多少行,但它似乎对不使用LIMIT的查询工作正常。
答案 2 :(得分:2)
请参阅此查询以获取示例:
此查询用于查找酒店的可用房间记录,只需查看此
即可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