左连接的 SQL 计数
Posted
技术标签:
【中文标题】左连接的 SQL 计数【英文标题】:SQL count with left join 【发布时间】:2021-10-19 01:37:44 【问题描述】:我想使用左连接从 2 个表中获取数据,这是我的表
第一个表(文件夹)
number | date |
---|---|
123/123 | 2021-08-14 |
321/321 | 2021-08-15 |
456/456 | 2021-08-15 |
098/098 | 2021-08-16 |
654/654 | 2021-08-17 |
第二张表(证书)
code | folder_number |
---|---|
asd1 | 123/123 |
asd2 | 123/123 |
asd3 | 123/123 |
asd4 | 123/123 |
asd5 | 123/123 |
qwe1 | 321/321 |
qwe2 | 321/321 |
qwe3 | 321/321 |
zxc1 | 456/456 |
zxc2 | 456/456 |
zxc3 | 456/456 |
rty1 | 098/098 |
fgh1 | 654/654 |
我只使用folder
表中的date
列,我想通过date
从folder
表中计算所有数据并左连接certificate
表,该表还计算所有连接/相关的code
number
列来自folder
表,这是我的代码
SELECT b.date, COUNT(c.code) as code, COUNT(b.date) as datecount
FROM folder b
INNER JOIN certificate c
ON c.folder_number = b.number
GROUP BY b.date
ORDER BY b.date
我对该代码的期望:
date | code | datecount |
---|---|---|
2021-08-14 | 5 | 1 |
2021-08-15 | 6 | 2 |
2021-08-16 | 1 | 1 |
2021-08-17 | 1 | 1 |
但是,这是我使用该代码时得到的结果:
date | code | datecount |
---|---|---|
2021-08-14 | 5 | 5 |
2021-08-15 | 6 | 6 |
2021-08-16 | 1 | 1 |
2021-08-17 | 1 | 1 |
如何解决?我也尝试使用inner join
,但结果是一样的
谢谢,抱歉我的英语不好顺便说一句
【问题讨论】:
【参考方案1】:你应该计算number
的不同数量而不是COUNT(b.date)
:
SELECT b.date,
COUNT(c.code) as code,
COUNT(DISTINCT b.number) as datecount
FROM folder b INNER JOIN certificate c
ON c.folder_number = b.number
GROUP BY b.date
ORDER BY b.date;
如果folder
中的number
s 在certificate
中可能不匹配,那么您应该使用LEFT
加入。
请参阅demo。
【讨论】:
以上是关于左连接的 SQL 计数的主要内容,如果未能解决你的问题,请参考以下文章