gpt4 book ai didi

mysql - 使用子查询中的条件进行计数

转载 作者:行者123 更新时间:2023-11-30 21:34:56 27 4
gpt4 key购买 nike

我有 4 个表,如下所示。我需要从 contact_made 表中获取 contact_made_id 的计数,以获取 'status_loan_id' = 33 或 43

的记录

我可以用子查询来做到这一点,但是我需要在查询结果中获取计数并在连接查询中按计数排序

  1. 贷款
    loan_id | Client_id
---------------------
9727 | 12668
9780 | 12720
9781 | 12721
9782 | 12722
9783 | 12723
9784 | 12724
9785 | 12725
  1. 客户
    Client_id
---------------------
12668
12720
12721
12722
12723
12724
12725
  1. clients_coms
    client_coms_id |   client_id
-----------------------------
2114 | 12668
2115 | 12668
2116 | 12668
2117 | 12668
2121 | 12668
2122 | 12668
2260 | 12720
2261 | 12720
2262 | 12720
2263 | 12721
2264 | 12721
2265 | 12721
2266 | 12722
2267 | 12722
2268 | 12723
2269 | 12723
2270 | 12723
2271 | 12723
2272 | 12724
2273 | 12724
2274 | 12724
2275 | 12724
2276 | 12725
2277 | 12725
2278 | 12725
  1. 联系方式
    contact_made_id | loan_id | status_loan_id
1 | 9727 | 3
2 | 9727 | 3
3 | 9727 | 34
4 | 9727 | 33
5 | 9727 | 3
6 | 9727 | 33
9 | 9727 | 3
0 | 9727 | 3
11 | 9782 | 33
12 | 9782 | 3
13 | 9782 | 33
14 | 9782 | 3
15 | 9782 | 34

我有下面的 SQL 但是它给出了以下不正确的输出

SELECT 
l.loan_id,
COUNT(cm.contact_made_id) AS contact_count
FROM loans l
LEFT JOIN contact_made cm
ON l.loan_id = cm.loan_id
AND (cm.status_loan_id = 33 OR cm.status_loan_id = 34)
LEFT JOIN clients_coms com
ON l.client_id = com.client_id
GROUP BY l.loan_id
ORDER BY contact_count ASC

输出...

loan_id | contact_count     
------------------------
9780 | 0
9781 | 0
9783 | 0
9784 | 0
9785 | 0
9782 | 6
9727 | 18

应该输出...

loan_id | contact_count     
------------------------
9780 | 0
9781 | 0
9783 | 0
9784 | 0
9785 | 0
9782 | 2
9727 | 3

最佳答案

你快到了。

为避免重复,您可以简单地使用 COUNT(DISTINCT...),例如:

COUNT(DISTINCT cm.contact_made_id) AS contact_count

但就此而言,您不需要JOIN clients_coms,因为loan_idcontact_made 中都可用贷款表。删除此连接可避免重复,因此无需使用 DISTINCT。我还将 loan_id 上的 OR 条件更改为 IN 条件。

SELECT l.loan_id, COUNT(cm.loan_id) contact_count
FROM
loans l
LEFT JOIN contact_made cm
ON l.loan_id = cm.loan_id
AND cm.status_loan_id IN (33, 34)
GROUP BY loan_id
ORDER BY 2, 1;

产量:

| loan_id | contact_count || ------- | ------------- || 9780    | 0             || 9781    | 0             || 9783    | 0             || 9784    | 0             || 9785    | 0             || 9727    | 3             || 9782    | 3             |

Demo on DB Fiddle .

关于mysql - 使用子查询中的条件进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384308/

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