计算MySQL中的行数以及实际的行内容
MySQL中有没有一种方法可以执行一条SQL语句,返回所选行以及结果行的计数 我可以这样做:计算MySQL中的行数以及实际的行内容,mysql,count,rows,Mysql,Count,Rows,MySQL中有没有一种方法可以执行一条SQL语句,返回所选行以及结果行的计数 我可以这样做: SELECT COUNT(*) FROM BigTable WHERE firstname LIKE 'a%'; 这给了我一个带有计数的结果行(37781)。我可以得到如下实际行数据: SELECT firstname FROM BigTable WHERE firstname LIKE 'a%'; SELECT firstname, COUNT(*) FROM BigTable WHERE fir
SELECT COUNT(*) FROM BigTable WHERE firstname LIKE 'a%';
这给了我一个带有计数的结果行(37781)。我可以得到如下实际行数据:
SELECT firstname FROM BigTable WHERE firstname LIKE 'a%';
SELECT firstname, COUNT(*) FROM BigTable WHERE firstname LIKE 'a%';
显示实际的37781行。但当我尝试将它们结合起来时,就像这样:
SELECT firstname FROM BigTable WHERE firstname LIKE 'a%';
SELECT firstname, COUNT(*) FROM BigTable WHERE firstname LIKE 'a%';
我得到一行,第一行与查询匹配,记录总数与查询匹配
我想看到的是两列37781行。第一列应包含每行的名字,第二列应包含每行的数字“37781”。有没有办法编写查询来完成此任务?您可以使用子查询进行连接:
SELECT firstname, ct
FROM BigTable
JOIN (SELECT COUNT(*) ct
FROM BigTable
WHERE firstname LIKE 'a%') x ON (1 = 1)
WHERE firstname LIKE 'a%'
可以使用交叉连接。子查询将获取所有名的计数,然后在每一行中包含该值:
SELECT firstname, d.total
FROM BigTable
CROSS JOIN
(
SELECT COUNT(*) total
FROM BigTable
WHERE firstname LIKE 'a%'
) d
WHERE firstname LIKE 'a%';
请参见我觉得MySQL的旧版本曾经是这样,但在我的测试中这不起作用 但根据手册,鉴于COUNT(*)是一个按函数分组的函数,并且自然地将所有行分组在一起,当没有附加group by语句时,我只能看到解决方案是使用多个语句或子查询。如果可以,我建议分别运行这两个查询,但如果不可能,请尝试:
SELECT firstname,
total
FROM BigTable,
( SELECT COUNT(*) AS total
FROM BigTable ) AS dummy
WHERE firstname LIKE 'a%';
交叉连接不是有效的方法,更好的方法是使用内联
SELECT
,如以下结构:
SELECT firstname,
(select count(*) from BigTable where firstname like 'a%') as count
from BigTable
where firstname like 'a%'
我用数据库中的50k条记录测试了这两种方法,这种方法几乎快了两倍。谢谢,效果非常好。Barmar的答案也很有效,但这比另一种方法(约6.5秒)要快一些(约5.75秒)。我没听说过。谢谢你的提示。@BrianMoore SQL Fiddle是由StackOverflow用户编写的!:)谢谢你,巴尔马!我测试了它,它完全符合我的要求。这接近我要查找的内容,尽管在第二列中,我得到了表中记录的总数,而不是与搜索匹配的总数。我在子查询中添加了“WHERE firstname LIKE'a%”,现在它返回了正确的响应。执行时间与BlueFoot的答案非常相似,重复运行时大约为6.1秒。非常感谢。是的,这样做很快-速度与根本不做计数(*)是一样的。很好:-)