gpt4 book ai didi

mysql - 如何使用 case-when-then 编写 mysql 查询?

转载 作者:行者123 更新时间:2023-11-29 05:23:09 24 4
gpt4 key购买 nike

关于如何运行以下查询的任何想法。我想我需要使用 case-when-then 和 group by 子句。谢谢

查找拥有至少包含(API、CUSTOM_WORKFLOW 和 FILE_UPLOAD)功能的“BASIC”版本或至少包含(API、CUSTOM_WORKFLOW)功能的“TRIAL”版本的所有客户

Customer table

id name edition
---------------------
1 CO1 BASIC
2 CO2 TRIAL
3 CO3 BASIC

Customer_Feature table

id company_id feature
------------------------
1 1 API
2 1 CUSTOM_WORKFLOW
3 1 FILE_UPLOAD
4 2 API
5 2 CUSTOM_WORKFLOW
6 2 FILE_SYNC
7 3 API
8 3 CUSTOM_WORKFLOW
9 3 FILE_SYNC

这应该只返回 ID 为 1 和 2 的客户。

最佳答案

我认为不需要 case 语句。此查询使用聚合,因此可以比较给定客户的所有功能:

select c.id
from customers c join
customer_feature cf
on c.id = cf.company_id
group by c.id
having sum(c.edition = 'BASIC' and cf.feature in ('API', 'CUSTOM_WORKFLOW', 'FILE_UPLOAD')) = 3 or
sum(c.edition = 'TRIAL' and cf.feature in ('API', 'CUSTOM_WORKFLOW')) = 2;

having 子句然后查看与每个版本匹配的相关功能的数量。这假设特征表中没有重复项 - 如果有重复项,查询将使用 count(distinct) 而不是 sum()

编辑:

要使用 count(distinct) 获取结果,请执行以下操作:

having count(distinct case when c.edition = 'BASIC' and cf.feature in ('API', 'CUSTOM_WORKFLOW', 'FILE_UPLOAD') then df.feature end) = 3 or
count(distinct case when c.edition = 'TRIAL' and cf.feature in ('API', 'CUSTOM_WORKFLOW') then cf.feature end) = 2;

关于mysql - 如何使用 case-when-then 编写 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280602/

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