MySQL SELECT 中的条件 SELECT

标签 mysql select

表:

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对于 false1对于 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/

相关文章:

mysql - 不唯一的表/别名 SQL

javascript - 使用 css、jquery 或 smth 水平翻转选择框

MySQL子查询与日期之间

sql - SQL 查询中的多个嵌套 SELECT

mysql - 过滤要在 DataGridView vb.net 中显示的内容

mysql - 如何在 SQL 中获取日期行差异

mysql - Mysql 按最近日期过滤

php返回未定义的属性

sql - 在一个sql命令中从一个数据库表中选择多个计数

php - 如何使用mysql从多个表中检索数据