mysql - 在子查询中获取条件计数
问题描述
我有 4 张桌子,如下所示。我需要contact_made_id
从contact_made
表中获取 'status_loan_id' = 33 或 43 的记录的计数
我可以使用子查询来执行此操作,但是我需要同时获取查询结果中的计数并按联接查询中的计数排序
- 贷款
loan_id | Client_id
---------------------
9727 | 12668
9780 | 12720
9781 | 12721
9782 | 12722
9783 | 12723
9784 | 12724
9785 | 12725
- 客户
Client_id
---------------------
12668
12720
12721
12722
12723
12724
12725
- 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
- 联系方式
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_id
中都可用。删除此连接可避免重复,因此需要使用. 我还将您的条件更改为条件。contact_made
loans
DISTINCT
OR
loan_id
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;
产量:
| 贷款ID | 联系计数 | | -------- | ------------- | | 9780 | 0 | | 9781 | 0 | | 9783 | 0 | | 9784 | 0 | | 9785 | 0 | | 9727 | 3 | | 9782 | 3 |
推荐阅读
- database - Postgres 中的视图列从何而来?
- python - 如何让图像在 pygame 中出现/消失?
- html - 这个简单的 HTML 和 CSS 代码不仅适用于 IOS 设备
- slurm - SLURM 错误 - sbatch HS8_main.sbatch sbatch:错误:无法打开文件 HS8_main.sbatch
- google-drive-api - Google Drive API V3 - 一些具有根父级的文件夹显示在 Google Drive UI 中的不同文件夹下
- python - 从 csv 文件中获取最大值和最小值 where (case)
- python - 无法在 Flask 中使用环境变量
- svg - 当svg文档的单词之间出现空格时如何将文本换行
- hive - 将pyspark中的一列字符串数组转换为一列中的多行
- javascript - 此函数应以 id、名称和电子邮件作为参数,并返回具有 `id`、`name` 和 `email` 属性的对象