将count(*)与SQL语句组合到一个表中

时间:2012-01-05 20:25:08

标签: mysql sql

我的MySQL数据库中有两个表(table1和表2)。我想编写一个SQL查询,在一个格式良好的报告中输出一些摘要统计信息。

让我们举个例子来考虑一个第一个SQL查询,该查询从第一个表中获取超过57岁的用户

SELECT count(*) AS OlderThank57
FROM table1
WHERE age >57

从第二个表格中我们想要获得女性用户数量

SELECT count(*) AS FemaleUsers
FROM table2
WHERE gender = "female"

现在我希望得到如下所示的输出

Number of Felame users from table 2: 514
Number of users over the age of 57 from table 1: 918

生成此类报告的最佳方式是什么?

4 个答案:

答案 0 :(得分:1)

SELECT CONCAT('Number of users over the age of 57 from table 1:', count(*))
  FROM table1
  WHERE age >57
UNION ALL
SELECT CONCAT('Number of Felame users from table 2: ', count(*))
  FROM table2
  WHERE gender = "female"

我没有mysql数据库来检查它,所以你可能需要将count(*)强制转换为字符串。

答案 1 :(得分:1)

使用WITH ROLLUP时,您可以随时尝试GROUP BY指令:

SELECT COUNT(*), gender FROM table1 GROUP BY gender WITH ROLLUP

如果你想要有点疯狂,你可以随时制作一系列IF来处理一件或多件事情的逻辑:

SELECT COUNT(*) IF(gender='female', 'female', IF(age>57, 'older_than_57', '*')) AS switch FROM table1 GROUP BY switch WITH ROLLUP

答案 2 :(得分:1)

我会提议从Adrian的答案扩展一个级别...返回两个单独的字段,这样您就可以将它们分别放在报告中,或者对齐/格式化数字等等。

SELECT 'Number of Female users from table 2:' as Msg, 
       count(*) as Entries
  FROM table1
  WHERE age >57
UNION ALL
SELECT 'Number of users over the age of 57 from table 1:' as Msg, 
       count(*) as Entries
  FROM table2
  WHERE gender = "female"

您可能必须将两个“Msg”列强制为相同的填充长度,否则可能会被截断。再一次,只是另一种选择......

答案 3 :(得分:0)

如果您没有规范化的数据库,那么联盟是您唯一的选择。您的另一个选择是更好地标准化/规范化您的数据库,以便您可以运行更高效的查询。