gpt4 book ai didi

mysql count(当条件1然后字段1、字段2、字段3结束时不同的情况)作为结果不允许case语句中存在多个字段

转载 作者:行者123 更新时间:2023-11-29 21:35:26 26 4
gpt4 key购买 nike

我想了解“by_an_adult”和“by_a_kid”分别购买了多少个不同的 toy_id、toy_color 和 toy_version 组合。

结果如下所示,在一行中,“by_an_adult”和“by_a_kid”作为字段名称(列标题)

by_an_adult   by_a kid
465 352

假设:

colname_1 = toy_id
colname2 = toy_color
colname3 = toy_version
colname_4 = toy_purchaser


select
count(distinct case when colname_4=’by_an_adult’ then colname_1, colname_2, colname_3 else null end) as num_distinct_by_an_adult,
count(distinct case when colname_4=‘by_a_kid’ then colname_1, colname_2, colname_3 else null end) as num_distinct_by_a_kid
from
a_bunch_of_tables

但是mysql不允许这样做。我们似乎只允许在“then”语句之后有一列

我也尝试过

case when col4=‘by_an_adult’ then count(distinct col1, col2, col3) end as num_by_adult,
case when col4=‘by_a_kid’ then count(distinct col1, col2, col3) end as num_by_kid

但这似乎不对,因为 num_by_kid 值总是为空。

另外,我只想要一排而不是两排,所以我不想要

by_an_adult     465
by_a_kid 352

最佳答案

正如 @JuanCarlosOropeza 在评论中所说,CASE 期望获得一个值,而不是字段列表。现在,由于您在这里关心的是获得不同的计数,因此您可以根据三列为其指定一个不同的值,例如它们的串联:

select 
count(distinct case when colname_4=’by_an_adult’ then CONCAT(colname_1, colname_2, colname_3) else null end) as num_distinct_by_an_adult,
count(distinct case when colname_4=‘by_a_kid’ then CONCAT(colname_1, colname_2, colname_3) else null end) as num_distinct_by_a_kid
from
a_bunch_of_tables

关于mysql count(当条件1然后字段1、字段2、字段3结束时不同的情况)作为结果不允许case语句中存在多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34956322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com