我正在尝试在phpBB论坛上撰写论坛排名细分。论坛排名由您的postcount定义:如果您有1-9个帖子,则为1级; 10-24你是2级;等等。 (最高等级是2000以上的任何职位。)
现在,我的论坛排名统计页面只是做了一堆愚蠢的查询:
SELECT COUNT(*) from _users WHERE post_count>=1 AND post_count<10;
SELECT COUNT(*) from _users WHERE post_count>=10 AND post_count<25;
......等等。
查询运行几秒钟,所以我真的只是好奇(以备将来参考)一个更好的方法来解决这个问题 - 感觉应该有一个我可以运行的查询,将返回类似于这样:
rank_id | count
1 | 5000
2 | 2000
...
我还有另一张表,其中列出了排名以及达到该排名所需的最少帖子数量。不确定是否有必要或者是否有更聪明的方式来编写我的查询。
如果有任何帮助,我正在使用MySQL数据库,但我对跨数据库的答案更感兴趣。
答案 0 :(得分:4)
在他们之间粘上一个UNION。
SELECT COUNT(*) from _users WHERE post_count>=1 AND post_count<10;
UNION
SELECT COUNT(*) from _users WHERE post_count>=10 AND post_count<25;
或者,您可以使用CASE WHEN来堆叠它们并将结果相加以使其成为一行。
SELECT
SUM(CASE WHEN post_count>=1 AND post_count<10 THEN 1 ELSE 0 END) AS Between_1_10
SUM(CASE WHEN post_count>=10 AND post_count<25 THEN 1 ELSE 0 END) AS Between_10_25
SUM(CASE WHEN post_count>=25 AND post_count<100 THEN 1 ELSE 0 END) AS Between_25_100
FROM
_users
或其他方式......
SELECT
Count(*)
, Category
FROM
(
SELECT
CASE
WHEN post_count>=1 AND post_count<10 THEN '1_To_10'
WHEN post_count>=10 AND post_count<25 THEN '10_To_25'
WHEN post_count>=25 AND post_count<100 THEN '25_To_100'
ELSE 'Over_100'
END As Category
FROM
_users
) as InnerTable
GROUP BY
Category
答案 1 :(得分:0)
我认为你正在寻找SELECT CASE...WHEN.