我有两张桌子想加入,但我无法得到理想的答案.我试图在两个主键和分组thrid列的基础上联合两个表,并希望得到第三列的计数.
表格1:
???????????????
? D_ID ? E_ID ?
???????????????
? 5 ? 25 ?
? 5 ? 26 ?
? 5 ? 27 ?
? 10 ? 30 ?
? 10 ? 31 ?
? 10 ? 32 ?
???????????????
Run Code Online (Sandbox Code Playgroud)
表2:
??????????????????????
? D_ID ? E_ID ? L_ID ?
??????????????????????
? 5 ? 25 ? 1 ?
? 5 ? 25 ? 2 ?
? 5 ? 25 ? 3 ?
? 5 ? 25 ? 4 ?
? 5 ? 26 ? 5 ?
? 5 ? 26 ? 6 ?
? 5 ? 26 ? 7 ?
? 5 ? 26 ? 8 ?
? 5 ? 27 ? 9 ?
? 10 ? 30 ? 10 ?
? 10 ? 30 ? 11 ?
? 10 ? 31 ? 12 ?
? 10 ? 31 ? 13 ?
? 10 ? 32 ? 14 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)
期望的输出:
?????????????????????????????
? D_ID ? E_ID ? Count(L_ID) ?
?????????????????????????????
? 5 ? 25 ? 4 ?
? 5 ? 26 ? 4 ?
? 5 ? 27 ? 1 ?
? 10 ? 30 ? 2 ?
? 10 ? 31 ? 2 ?
? 10 ? 32 ? 1 ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
使用此查询:
select a.D_ID, a.E_ID, count(b.L_ID)
from table1 a, table2 b
where a.D_ID = b.D_ID and
a.E_ID = b.E_ID
group by a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)
加入很重要,因为表2是包含数百万条记录的大表,而表1只有我需要的几千条记录.我不需要所有的D_ID和E_ID.我只需要那些D_ID与E_ID它们在Table1.
只需在计数中添加一个DISTINCT子句就像这样
SELECT
a.D_ID, a.E_ID, COUNT(DISTINCT b.L_ID)
FROM table1 a, table2 b
WHERE a.D_ID = b.D_ID
AND a.E_ID = b.E_ID
GROUP BY a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)
我个人喜欢加入桌子就是这样
SELECT a.d_id, a.e_id, COUNT(DISTINCT b.l_id)
FROM table1 a
JOIN table2 b ON a.D_ID = b.D_ID
AND a.E_ID = b.E_ID
GROUP BY a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)
看到这个DEMO用正确的结果集执行所有两个查询
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |