我的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
生成此类报告的最佳方式是什么?
答案 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)
如果您没有规范化的数据库,那么联盟是您唯一的选择。您的另一个选择是更好地标准化/规范化您的数据库,以便您可以运行更高效的查询。