COUNT 中使用 case when + distinct
时间: 2023-08-21 20:27:53 浏览: 2100
在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函数将返回符合条件的行数,而不是不同值的数量。
相关问题
select t1.month_id, count(distinct case when t1.offer_type_name='主套餐' then offer_name end) aa, count(distinct case when t1.offer_type_name='促销' then offer_name end) bb, count(distinct case when t1.offer_type_name='可选包' then offer_name end) cc, count(distinct case when t2.offer_type_name='主套餐' then offer_name end) aaa, count(distinct case when t2.offer_type_name='促销' then offer_name end) bbb, count(distinct case when t2.offer_type_name='可选包' then offer_name end) ccc, from zone_crmchk.dwd_sum_zhuliuxxsc t1 left join zone_crmchk.dwd_sum_zhuliuxxsc t2 on t2.month < t1.month group by t1.month, count(distinct case when offer_type_name='主套餐' then offer_name end) aa, count(distinct case when offer_type_name='促销' then offer_name end) bb, count(distinct case when offer_type_name='可选包' then offer_name end) cc
根据您提供的 SQL 查询语句,我发现其中存在一个逗号(,)出现在了 FROM 子句之后,这是一个语法错误。您需要将逗号(,)删除,同时将查询语句修改为如下形式:
```
SELECT
t1.month_id,
COUNT(DISTINCT CASE WHEN t1.offer_type_name='主套餐' THEN offer_name END) aa,
COUNT(DISTINCT CASE WHEN t1.offer_type_name='促销' THEN offer_name END) bb,
COUNT(DISTINCT CASE WHEN t1.offer_type_name='可选包' THEN offer_name END) cc,
COUNT(DISTINCT CASE WHEN t2.offer_type_name='主套餐' THEN offer_name END) aaa,
COUNT(DISTINCT CASE WHEN t2.offer_type_name='促销' THEN offer_name END) bbb,
COUNT(DISTINCT CASE WHEN t2.offer_type_name='可选包' THEN offer_name END) ccc
FROM
zone_crmchk.dwd_sum_zhuliuxxsc t1
LEFT JOIN zone_crmchk.dwd_sum_zhuliuxxsc t2 ON t2.month < t1.month
GROUP BY
t1.month_id,
COUNT(DISTINCT CASE WHEN offer_type_name='主套餐' THEN offer_name END),
COUNT(DISTINCT CASE WHEN offer_type_name='促销' THEN offer_name END),
COUNT(DISTINCT CASE WHEN offer_type_name='可选包' THEN offer_name END);
```
这样修改后,查询语句应该就能正确执行了。
count(distinct case when
当条件成立时,计算不同值的数量。
例如:
count(distinct case when gender='male' then user_id end)
这个语句的意思是:当用户的性别为男性时,统计不同的用户ID数量。
阅读全文