我想加入两张桌子,但我无法得到理想的答案。 我试图在两个主键和分组thrid列的基础上联合两个表,并希望得到第三列的计数。
表1:
╔══════╦══════╗
║ D_ID ║ E_ID ║
╠══════╬══════╣
║ 5 ║ 25 ║
║ 5 ║ 26 ║
║ 5 ║ 27 ║
║ 10 ║ 30 ║
║ 10 ║ 31 ║
║ 10 ║ 32 ║
╚══════╩══════╝
表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 ║
╚══════╩══════╩══════╝
期望的输出:
╔══════╦══════╦═════════════╗
║ 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 ║
╚══════╩══════╩═════════════╝
使用此查询:
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
加入很重要,因为表2是巨大的表,有数百万条记录,表1只有几千条记录,这就是我所需要的。我不需要所有D_ID
和E_ID
' s。我只需要D_ID
中的E_ID
和Table1
。
答案 0 :(得分:9)
只需将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
我个人对加入桌子的偏好是这样的
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
查看此DEMO使用正确的结果集执行所有两个查询