COUNT 中使用 case when + distinct
时间: 2023-08-21 09:27:53 浏览: 928
在MySQL中,我们可以使用COUNT函数来计算特定条件下的行数,同时也可以使用DISTINCT关键字来获取不同的值。如果你需要在COUNT函数中使用CASE WHEN语句和DISTINCT关键字,可以按照以下格式编写SQL语句:
```
SELECT COUNT(DISTINCT CASE WHEN condition1 THEN column1 ELSE NULL END) AS count1,
COUNT(DISTINCT CASE WHEN condition2 THEN column2 ELSE NULL END) AS count2,
COUNT(DISTINCT CASE WHEN condition3 THEN column3 ELSE NULL END) AS count3
FROM table_name;
```
在这个例子中,我们使用了三个CASE WHEN语句和DISTINCT关键字,以便获取每个条件下不同的值的数量。
- 当条件1成立时,我们计算column1的不同值的数量,并将其赋值给计数器count1。
- 当条件2成立时,我们计算column2的不同值的数量,并将其赋值给计数器count2。
- 当条件3成立时,我们计算column3的不同值的数量,并将其赋值给计数器count3。
请注意,我们在COUNT函数中使用了DISTINCT关键字,以便获取不同的值的数量。如果我们省略了DISTINCT关键字,则COUNT函数将返回符合条件的行数,而不是不同值的数量。
相关问题
case when 和distinct同时使用
当使用`CASE WHEN`和`DISTINCT`同时时,`CASE WHEN`子句用于根据条件对数据进行分类或更改。`DISTINCT`关键字用于去除结果集中的重复行。
下面是一个示例,将说明如何同时使用`CASE WHEN`和`DISTINCT`:
假设我们有一个名为`orders`的表,其中包含订单ID(order_id)和订单状态(status)两个列。我们想要查询每个不同状态的订单数量。
```sql
SELECT DISTINCT
CASE
WHEN status = 'pending' THEN '待处理'
WHEN status = 'shipped' THEN '已发货'
WHEN status = 'delivered' THEN '已送达'
ELSE '其他'
END AS order_status,
COUNT(DISTINCT order_id) AS order_count
FROM orders
GROUP BY order_status;
```
以上查询使用了`CASE WHEN`将订单状态映射为易读的值,并使用`DISTINCT`去除重复的订单ID。然后,使用`GROUP BY`将结果按照订单状态进行分组,并计算每个状态的订单数量。
在实际应用中,你可以根据具体需求进行修改和调整。
count(distinct case when
当条件成立时,计算不同值的数量。
例如:
count(distinct case when gender='male' then user_id end)
这个语句的意思是:当用户的性别为男性时,统计不同的用户ID数量。