MySql:如何创建子查询并计算两个表中id相同的所有行

时间:2014-08-27 19:03:15

标签: mysql sql

如何进行返回特定ID值的查询并不是全部。

    SELECT content.id, count(case likes.type when 'p' then 1 else null end) as p
FROM content
JOIN likes on likes.content_id = content.id

此代码返回:

ID p
1 18

但我想要它:

ID p
1 12
2 4
3 2

2 个答案:

答案 0 :(得分:1)

添加group by

SELECT content.id, 
       sum(likes.type = 'p') as p
FROM content
JOIN likes on likes.content_id = content.id
GROUP BY content.id

然后,聚合函数(即count())将应用于组,而不是整个结果。

答案 1 :(得分:1)

您的查询在大多数数据库中都会失败。问题是content.id中没有汇总select,但您使用的是聚合函数。

这是一个很难解决的问题:

SELECT content.id, count(case likes.type when 'p' then 1 else null end) as p
FROM content
JOIN likes on likes.content_id = content.id
GROUP BY content.id;

但是,一般情况下,您应该小心,始终select的{​​{1}}中包含所有非聚合列。