PostgreSQL:加入另一个表的计数
发布时间:2020-12-13 18:07:23 所属栏目:百科 来源:网络整理
导读:我有三个表:用户,项目和板. create table users ( id serial primary key,name text); create table items ( id serial primary key,user_id int,title text); create table boards ( id serial primary key,title text);n 我想选择每个用户拥有的项目数和
我有三个表:用户,项目和板.
create table users ( id serial primary key,name text ); create table items ( id serial primary key,user_id int,title text ); create table boards ( id serial primary key,title text );n 我想选择每个用户拥有的项目数和板数的所有用户: select users.*,count(items) as item_count,count(boards) as board_count from users left join items on items.user_id = users.id left join boards on boards.user_id = users.id group by users.id; 不幸的是,这并没有给我正确的数量.计数高于应有的数量.发生了什么,为什么,以及如何解决这个问题?
问题是由两个左连接产生重复值的事实引起的.
要解决此问题,您可以只计算不同的值 SELECT u.id,u.name,COUNT(DISTINCT i.id) item_count,COUNT(DISTINCT b.id) board_count FROM users u LEFT JOIN items i ON u.id = i.user_id LEFT JOIN boards b ON u.id = b.user_id GROUP BY u.id,u.name 或者分别计算每个用户的项目和板子,然后与用户一起加入 SELECT u.*,COALESCE(i.item_count,0) item_count,COALESCE(b.board_count,0) board_count FROM users u LEFT JOIN ( SELECT user_id,COUNT(*) item_count FROM items GROUP BY user_id ) i ON u.id = i.user_id LEFT JOIN ( SELECT user_id,COUNT(*) board_count FROM boards GROUP BY user_id ) b ON u.id = b.user_id 这是SQLFiddle演示 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |