0

我有两个表,列表和 globals_lists。globals_lists 基本上将 list_id 与 global_id 值相关联。我想为每个用户获取关联列表类型的 global_ids 计数(即 globals_lists 表中的“manys”数)。

就像是:

select l.id, l.user_id, count(gl.global_id) as gl_count 
from   lists l, globals_lists gl 
where  l.list_type_id=10 and l.id=gl.list_id;

但这给了我错误的信息。

4

3 回答 3

1

添加:

GROUP BY l.id, l.user_id 

在你的where条款之后。

如果没有GROUP BY,您基本上只是计算所有满足WHERE和连接条件的行,而不考虑设置分组。GROUP BY将确保您正在执行每个用户的计数聚合 -> 列表组合。

于 2012-08-02T19:03:14.190 回答
1
select l.id, l.user_id, count(gl.global_id) as gl_count 
from   lists l, globals_lists gl 
where  l.list_type_id=10 and l.id=gl.list_id
GROUP BY l.id, l.user_id;
于 2012-08-02T19:05:41.213 回答
1

当您使用像 之类的聚合函数count时,您应该指定聚合应该在其上运行的组。MySQL 不需要这个,但如果你这样做总是会更清楚。

在您的情况下,您要查找的组是(user_id, list_id). 您可以编写如下查询:

select  l.user_id
,       l.id
,       count(gl.global_id) as gl_count 
from    lists l
join    globals_lists gl 
on      l.id = gl.list_id
where   l.list_type_id = 10
group by
        l.user_id
,       l.id
于 2012-08-02T19:06:27.370 回答