在一个MySQL查询中计算总行数,同时选择这些行的子集?

时间:2011-12-03 19:08:39

标签: mysql

我正在浏览数据库中的最新五个条目。我还想显示旁边的条目总数。

目前我正在运行两个查询 - 第一个是获取最新的五个查询:

SELECT reference.id, reference.name
FROM reference
WHERE (status = 2 OR status = 3)
ORDER BY reference.date
LIMIT 5

第二,计算总数:

SELECT COUNT(reference.status) AS complete_count
FROM reference
WHERE (status = 2 OR status = 3)

有没有办法将这两者合二为一?当我尝试将另一列添加到第一个查询的输出(COUNT)时,它只返回一行。

谢谢!

3 个答案:

答案 0 :(得分:3)

这应该会给你你所希望的东西:

SELECT reference.id, reference.name, COUNT(1) AS complete_count
FROM reference
WHERE status = 2
   OR status = 3
GROUP BY reference.id, reference.name
ORDER BY reference.date
LIMIT 5

答案 1 :(得分:0)

你可以将子选择拉为项目......

select foo, bar, (select count(*) from tableA) from tableA;

请记住,根据查询其余部分的复杂性,这可能是一个相当昂贵的选择。

答案 2 :(得分:0)

是的,方法很少: -

select reference.id, reference.name, b.complete_count
FROM reference
JOIN
(
 SELECT COUNT(reference.status) AS complete_count
 FROM reference
 WHERE (status = 2 OR status = 3)
) as b
WHERE ...

这种方法比计数更好,然后加入。

提出的另一个答案是触发每行的子查询,
这不太理想。

或者您可以使用http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows(两个查询)