首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何一次查询一系列范围上的count()?

如何一次查询一系列范围上的count()?
EN

Stack Overflow用户
提问于 2009-04-26 18:50:28
回答 2查看 152关注 0票数 2

我正在尝试撰写一个phpBB论坛的论坛排名明细。论坛排名由你的帖子数量定义:如果你有1-9篇帖子,你就是1级;10-24级,你是2级;以此类推。(最高职级是2000个职位以上的任何职位。)

现在,我的论坛排名统计页面只是在做一堆愚蠢的查询:

代码语言:javascript
复制
SELECT COUNT(*) from _users WHERE post_count>=1 AND post_count<10;
SELECT COUNT(*) from _users WHERE post_count>=10 AND post_count<25;

..。诸若此类。

查询在几秒钟内运行,所以我真的很好奇(为了将来参考)有一种更好的方法来解决这个问题-感觉应该有一个我可以运行的查询,它将返回类似以下的结果:

代码语言:javascript
复制
rank_id | count
1       | 5000
2       | 2000
...

我有另一个表,其中列出了职级和达到该职级所需的最低职位数。我不确定这是否有必要,或者是否有更聪明的方式来编写我的查询。

我使用的是MySQL DB,但我更感兴趣的是跨数据库的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-26 19:03:50

在它们之间建立一个联盟。

代码语言:javascript
复制
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将它们堆叠在一起,并将结果相加,以在一行上获得结果。

代码语言:javascript
复制
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 

或者是另一种方式...

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2009-04-26 18:59:42

我想你是在找SELECT CASE...WHEN.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/791373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档