我正在尝试撰写一个phpBB论坛的论坛排名明细。论坛排名由你的帖子数量定义:如果你有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 DB,但我更感兴趣的是跨数据库的答案。
发布于 2009-04-26 19:03:50
在它们之间建立一个联盟。
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将它们堆叠在一起,并将结果相加,以在一行上获得结果。
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发布于 2009-04-26 18:59:42
我想你是在找SELECT CASE...WHEN.
https://stackoverflow.com/questions/791373
复制相似问题