在 groupBy 选择后计算总记录数
Posted
技术标签:
【中文标题】在 groupBy 选择后计算总记录数【英文标题】:count total records after groupBy select 【发布时间】:2011-02-11 10:52:26 【问题描述】:我有一个具有 groupBy 的 mysql 选择查询。 我想统计分组后的所有记录。 有没有办法直接从 mysql 中解决这个问题?
谢谢。
【问题讨论】:
【参考方案1】:如果您唯一需要的是分组后的计数,并且您不想使用 2 个单独的查询来找到答案。你可以用这样的子查询来做到这一点......
select count(*) as `count`
from (
select 0 as `doesn't matter`
from `your_table` yt
group by yt.groupfield
) sq
注意:您必须在子查询中实际选择某些内容,但您选择的内容并不重要
注意:所有临时表都必须有一个命名别名,因此末尾有“sq”
【讨论】:
【参考方案2】:你可以使用FOUND_ROWS():
SELECT <your_complicated_query>;
SELECT FOUND_ROWS();
它确实适用于 LIMIT,告诉您没有 LIMIT 会返回多少行,但它似乎适用于不使用 LIMIT 的查询。
【讨论】:
在SELECT
之后不要忘记SQL_CALC_FOUND_ROWS
。
这在任何情况下都很糟糕,尤其是当您拥有数百万条记录时
FOUND_ROWS()
已弃用:dev.mysql.com/doc/refman/8.0/en/…【参考方案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
【讨论】:
以上是关于在 groupBy 选择后计算总记录数的主要内容,如果未能解决你的问题,请参考以下文章