假设我有两张桌子
表a
SOME_ID
1
2
3
4
表b
SOME_ID
1
2
1
4
现在我想收到的是像
这样的表格id 金额
1 | 2
2 | 1
我尝试了以下查询:
SELECT COUNT(a.some_id) as id
FROM Table_a
INNER JOIN Table_b
ON Table_a.some_id = Table.b.some_id
但是只返回了两个表中有多少个id行 有什么帮助吗?
答案 0 :(得分:2)
在table_b上进行分组,然后将该结果集加入table_a
SELECT b.* FROM
(
SELECT id, COUNT(*) AS Cnt
FROM Table_b
GROUP BY id
) b
INNER JOIN Table_a a ON a.id = b.id
<强> SQLFiddle 强>
答案 1 :(得分:1)
如果我理解正确,你需要直方图的直方图:
select cnt, count(*) as num_ids
from (select id, count(*) as cnt
from b
group by id
) b
group by cnt;
答案 2 :(得分:1)
如果您想要零计数:
SELECT a.some_id AS id, count(b.some_id) as amount
FROM a LEFT JOIN b ON a.some_id = b.some_id
GROUP BY a.some_id
结果:
id | amount
1 | 2
2 | 1
3 | 0
4 | 1
如果不是:
SELECT a.some_id AS id, count(*) as amount
FROM a INNER JOIN b ON a.some_id = b.some_id
GROUP BY a.some_id
结果:
id | amount
1 | 2
2 | 1
4 | 1
不同之处在于连接类型。一旦离开外连接。内连接。请注意,在第一种情况下,使用count(b.some_id)
进行计数非常重要。对于count(*)
,缺少b条目的行将计为1. count(*)
计算行数。 count(expression)
计算非空值。