Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择和计算表中的行范围_Mysql_Sql - Fatal编程技术网

Mysql 如何选择和计算表中的行范围

Mysql 如何选择和计算表中的行范围,mysql,sql,Mysql,Sql,我有一个名为projects的表,其中有一列名为projects bug(存储值从0到2000)。表中存储了大约2000行,我需要获得类似4个范围内的项目计数,如下所示: 0-500 501-1000 1001-1500 1501-2000 以显示每个范围中有多少个项目的方式? 您能告诉我这在单行SQL中是否可行吗?如何做到这一点 如果您使用SUM()函数尝试下面的方法会怎么样 select sum(`project-bug` between 0 and 500) as 0_500,

我有一个名为
projects
的表,其中有一列名为
projects bug
(存储值从0到2000)。表中存储了大约2000行,我需要获得类似4个范围内的项目计数,如下所示:

0-500
501-1000
1001-1500
1501-2000

以显示每个范围中有多少个项目的方式?
您能告诉我这在单行SQL中是否可行吗?如何做到这一点

如果您使用
SUM()
函数尝试下面的方法会怎么样

select sum(`project-bug` between 0 and 500) as 0_500,
       sum(`project-bug` between 501 and 1000) as 501_1000,
       sum(`project-bug` between 1001 and 1500) as 1001_1500,
       sum(`project-bug` between 1501 and 2000) as 1501_2000
from projects
select SUM(case when `projects-bug` between 0 and 500 then 1 else 0 end) as sum1,
SUM(case when `projects-bug` between 501 and 1000 then 1 else 0 end) as sum2,
SUM(case when `projects-bug` between 1001 and 1500 then 1 else 0 end) as sum3,
SUM(case when `projects-bug` between 1501 and 2000 then 1 else 0 end) as sum4
from projects

如果要为每个计数返回单独的行,可以执行以下操作:

  SELECT CONCAT(q.lo,' - ',q.hi)  AS range_
       , COUNT(p.`projects-bug`)  AS count_
    FROM ( SELECT 0 AS lo, 500 AS hi
           UNION ALL SELECT 501, 1000 
           UNION ALL SELECT 1001, 1500
           UNION ALL SELECT 1501, 2000
         ) q
    JOIN projects p
      ON p.`projects-bug` BETWEEN q.lo AND q.hi  
   GROUP BY q.lo, q.hi
你的例子中[blahblah]可能在哪里

(id-1) DIV 500
或者(更准确地说)


编辑:您甚至可以添加一个
WHERE
子句,这样您就可以只获取活动/过期/任何项目的数量。

0-500
作为varchar存储在您的记录中?不,它们都是数字。我投票关闭这个问题,因为它太本地化了。是的,计算
sum()
中的条件为真的次数。这是有条件的计数Hi Rahul你能告诉我为什么在脚本中使用
然后1 else 0 end
吗?@suffei,这是有条件的,我在这里使用CASE语句,所以这是语法。如果条件匹配,则只有它的值为1。您还可以使用与Jurgen在其答案中显示的相同的
sum()。
(id-1) DIV 500
IF(id BETWEEN 0 AND 500, 1
  , IF(id BETWEEN 501 AND 1000, 2
  , [etc....]))