gpt4 book ai didi

mysql - 带有 GROUP BY HAVING AND WHERE 的简单 sql

转载 作者:行者123 更新时间:2023-11-29 03:22:57 25 4
gpt4 key购买 nike

我有一对多表。表 ticket 和表 solution。每张票都有几种解决方案。解决方案有列:ticketIdstatusserviceId

因此,每张票都可以由一个或多个服务解决。 Status 可以是:ready to resolvedone。只有一项服务可以完成票务工作。但也有可用的情况,其中票证的所有解决方案都具有状态 = 准备好解决。

我想从所有工单的表对中获取:工单行 - 解决方案行,其中:serviceId = N 并且工单没有其他状态为 done 的服务。

我尝试通过这个解决我的问题:

SELECT t.*, s.* FROM Ticket t 
JOIN Solution s ON t.id = s.ticketId
WHERE s.serviceId = N
GROUP BY s.ticketId HAVING SUM(CASE WHEN s.serviceId <> N AND s.status = 'done' THEN 1 ELSE 0 END) = 0;

但这种方式行不通,因为 WHERE s.serviceId = N 只选择一行,当然,总和将始终为 0。如果我删除 WHERE,则总和开始计算正确,但我从表 solution 获取票证总是第一行,但我想要服务 = N 的行。

我该如何解决?

例子。

Ticket T.解决方案:S1 (service = N, status = ready), S2 (service = K, status = ready) -> get (T, S1).

Ticket T. Solutions: S1 (service = N, status = done), S2 (service = K, status = ready) -> get (T, S1).

工单 T. 解决方案:S1(服务 = N,状态 = 就绪),S2(服务 = K,状态 = 完成)-> 空。

当然,S3、S4 可以使用服务 Q、W...但是无论如何:零个或一个解决方案的状态为完成。

最佳答案

删除 Where 子句并试试这个 Having 子句

HAVING SUM(CASE WHEN s.serviceId = 'N' AND s.status = 'done' THEN 1 ELSE 0 END) = 0
AND SUM(s.serviceId = 'N') > 0;

考虑到N应该是字符串

关于mysql - 带有 GROUP BY HAVING AND WHERE 的简单 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40949484/

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