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