Mysql 按范围限制查询分组记录

Mysql 按范围限制查询分组记录,mysql,sql,select,group-by,Mysql,Sql,Select,Group By,我有一张像下面这样的桌子 CREATE TABLE budgets(limit_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, upper_limit INT, lower_limit INT); 表中的值如下所示 INSERT INTO budgets(lower_limit, upper_limit) VALUES(0, 15000),

我有一张像下面这样的桌子

CREATE TABLE budgets(limit_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
                     upper_limit INT, 
                     lower_limit INT);
表中的值如下所示

INSERT INTO budgets(lower_limit, upper_limit)
             VALUES(0, 15000),
                   (10200, 15300),
                   (15200, 17002),
                   (30000, 45050),
                   (17002, 30000),
                   (27002, 30500),
                   (30500, 35200),
                   (45200, 55000),
                   (55000, 65020),
                   (25000, 30000),
                   (40000, 60000),
                   (65000, 75000);
我使用了如下所示的select查询来获取值

SELECT 'Betw 0 to 25000', COUNT(limit_id)
  FROM budgets
 WHERE lower_limit>=0  AND  upper_limit<=25000
 UNION ALL
SELECT 'Betw 25000 to 50000', COUNT(limit_id)
  FROM budgets
 WHERE lower_limit>=25000  AND  upper_limit<=50000
 UNION ALL
 SELECT 'Betw 50000 to 75000',COUNT(limit_id)
   FROM budgets
  WHERE lower_limit >=50000  AND  upper_limit<=75000
其余3条记录不属于任何范围

请帮助我了解我是在DB设计中出错,还是在为数据库编写错误的查询 上述要求

尝试以下方法:

编辑

SELECT IFNULL(CONCAT('Between ', lowerLimit, ' to ',upperLimit), 'Not in Range') bType, COUNT(limit_id) budgetCount 
FROM budgets b 
LEFT JOIN (SELECT 0 lowerLimit, 25000 upperLimit 
           UNION 
           SELECT 25000 lowerLimit, 50000 upperLimit 
           UNION 
           SELECT 50000 lowerLimit, 75000 upperLimit
          ) A ON b.upper_limit >= A.lowerLimit AND b.lower_limit <= A.upperLimit
GROUP BY bType;


SELECT CONCAT('Between ', lowerLimit, ' to ',upperLimit) bType, COUNT(limit_id) budgetCount 
FROM budgets b 
INNER JOIN (SELECT 0 lowerLimit, 25000 upperLimit 
            UNION 
            SELECT 25000 lowerLimit, 50000 upperLimit 
            UNION 
            SELECT 50000 lowerLimit, 75000 upperLimit
          ) A ON b.upper_limit >= A.lowerLimit  AND b.lower_limit <= A.upperLimit
GROUP BY bType;
|                  BTYPE | BUDGETCOUNT |
----------------------------------------
|     Between 0 to 25000 |           3 |
| Between 25000 to 50000 |           4 |
| Between 50000 to 75000 |           2 |
这会奏效的

 SELECT 'Betw 0 to 25000', COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=0  and upper_limit<=25000  
 UNION ALL
SELECT 'Betw 25000 to 50000', COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=25000  and upper_limit<=50000   
 UNION ALL
SELECT 'Betw 50000 to 75000',COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=50000  and upper_limit<=75000   

查询工作正常。你想要实现什么?我认为查询中存在逻辑错误。记录(17002,30000),(45200,55000),(40000,60000)不在任何范围内。谢谢回复。是的,查询正在运行。我希望所有12条记录在任何一种情况下都被记录。在输出查询中,它只显示9条记录请参见上面的注释,经过编辑。在这种情况下,
(17002,30000)
它将属于哪里?好的,但我们不知道您想要什么。你能告诉我吗?例如,记录(17002,30000)必须属于哪个组?谢谢你的回答。你还没有理解我的问题。我检查了你的问题,所以我想知道3个组的其余部分应该属于哪个类别。看,我知道它不属于任何类别。但是如果你有需要生成报告的要求(饼图)你想把所有的记录都归入任何一个类别,你会怎么做呢?我认为我的数据库设计是错误的,然后我把所有的记录都归入“不在范围内”类别。查看我的最新答案,您将答案张贴在哪里
 SELECT 'Betw 0 to 25000', COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=0  and upper_limit<=25000  
 UNION ALL
SELECT 'Betw 25000 to 50000', COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=25000  and upper_limit<=50000   
 UNION ALL
SELECT 'Betw 50000 to 75000',COUNT(limit_id)
  FROM budgets
 WHERE upper_limit>=50000  and upper_limit<=75000   
Between 0 to 25000          3
Between 25000 to 50000      5
Between 50000 to 75000      4