我想为每个不同的id计算联接中返回的每一行的数目,但是例如,我不知道该怎么做
SELECT a.ticket_id, a.class, a.create, b.info, b.info_count
FROM a
LEFT JOIN b
ON a.ticket_id = b.ticket_id
ticket_id info_count
--------- ----------
1 1
1 2
2 1
2 2
2 3
3 1
3 2
3 3
3 4
有没有办法做到这一点?有人可以帮我吗?
谢谢!
答案 0 :(得分:1)
使用count()
和group by
SELECT a.ticket_id,count(b.info_count)
FROM a LEFT JOIN b
ON a.ticket_id = b.ticket_id
group by a.ticket_id
或者如果您想为每个ID计数,也可以使用row_number()
SELECT a.ticket_id, a.class, a.create, b.info, b.info_count,
row_number() over(partition by a.ticket_id order by a.create) as cnt
FROM a
LEFT JOIN b
ON a.ticket_id = b.ticket_id
答案 1 :(得分:0)
这取决于您所说的“返回行”。如果您指的是行数,则可以使用:
SELECT a.ticket_id, COUNT(*) as cnt
FROM a LEFT JOIN
b
ON a.ticket_id = b.ticket_id
GROUP BY a.ticket_id;
cnt
个值的总和将成为结果集中的总行。
如果您的意思是“匹配b
中的行”,那将是Fahmi的答案:
SELECT a.ticket_id, COUNT(b.ticket_id) as cnt
FROM a LEFT JOIN
b
ON a.ticket_id = b.ticket_id
GROUP BY a.ticket_id;
cnt
的总和将不包含b
中不匹配的行。
如果这是您想要的,那么它可能会更快(值得测试):
select a.ticket_id,
(select count(*) from b where a.ticket_id = b.ticket_id) as cnt
from a;
尤其是,这可以有效利用b(ticket_id)
上的索引-该索引对所有查询都有用。