表:
id price is_active
========================
1 20.99 0
2 10.99 1
3 30.99 0
4 15.99 1
5 35.99 1
我试图选择 is_active 等于 1 的所有行中的 COUNT 个,因此我使用了这个简单的查询:
SELECT COUNT(*) FROM table WHERE is_active=1
但是如果我还想知道有多少行有价格怎么办:
- 少于 15
- 15 到 30 之间
- 超过30
我可以这样写:
SELECT COUNT(*) FROM table WHERE is_active=1 AND price < 15
SELECT COUNT(*) FROM table WHERE is_active=1 AND price > 15 AND price < 30
SELECT COUNT(*) FROM table WHERE is_active=1 AND price > 30
但是我可以通过一个返回类似内容的简单查询来完成此操作吗?
"Less than 15" | "Between 15 and 30" | "More than 30"
1 | 2 | 2
最佳答案
使用条件聚合:
SELECT
SUM(price < 15) `Less than 15`,
SUM(price >= 15 AND price <= 30) `Between 15 and 30`,
SUM(price > 30) `More than 30`
FROM `table`
WHERE is_active=1
在 MySql 中, bool 表达式如price < 15
评估为0
对于 false
或1
对于 true
.
请参阅demo .
结果:
| Less than 15 | Between 15 and 30 | More than 30 |
| ------------ | ----------------- | ------------ |
| 1 | 1 | 1 |
关于MySQL SELECT 中的条件 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59239899/