来自多个表的sql count()

英国广播公司

有这样的表:

  1. 图片:

    wall_id|picture_id|user_id|likes
          1|         1|      1|    2
          1|         2|      1|    0
          2|         1|      1|    1
          2|         2|      2|    2
    

对(wall_id,picture_id)是唯一的

  1. 喜欢者:

    wall_id|picture_id|user_id
          1|         1|      3
          1|         1|      2
          2|         1|      2
          2|         2|      4
          2|         2|      3
    

我想得到这样的东西:

    user_id|pictures_count|likes_count|likers_count
          1|             3|          3|           2
          2|             1|          2|           2

我尝试了这个:

select p.user_id as user_id, 
    count(p.user_id) as pictures_count, 
    sum(p.likes) as likes_count, 
    count(distinct l.user_id) as likers_count
 from pictures p
 left join likers l on p.wall_id = l.wall_id 
                       and p.picture_id = l.picture_id
 group by p.user_id

select pictures.user_id, count(pictures.user_id) as pictures_count,
     sum(pictures.likes) as likes_count, 
    count(distinct likers.user_id) as likers_count 
from pictures, likers 
where pictures.picture_id = likers.picture_id 
    and pictures.user_id = likers.user_id 
group by pictures.user_id

但是我得到这样的结果:

    user_id|pictures_count|likes_count|likers_count
          1|             4|          6|           2
          2|             2|          4|           2

我应该怎么做才能得到正确的结果?

戈登·利诺夫

Joins是很奇怪的事情。当您有一个键并且两边匹配多行时,那么您将获得期望的更多行。解决方案是预聚集每一侧的行。

数据模型有点复杂,因为您需要使用join来查找likes的用户ID

 select p.user_id as user_id, p.pictures_count, p.likes_count, l.likers_count
 from (select p.user_id, count(*) as pictures_count, sum(likes) as likes_count
       from pictures p
       group by p.user_id
      ) p left join
      (select p.user_id, count(distinct l.user_id) as likers_count
       from pictures p left join
            likers l
            on p.wall_id = l.wall_id and p.picture_id = l.picture_id
       group by p.user_id
      ) l
      on p.user_id = l.user_id;

注意,由于聚合是在子查询中完成的,因此外部查询不再需要它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单个查询中来自多个表的多个COUNT SELECTS

来自分类Dev

来自多个联接表的COUNT行-MSSQL

来自分类Dev

来自多个表的SQL LIKE

来自分类Dev

来自多个表的SQL数据

来自分类Dev

来自多个表的SQL计数行

来自分类Dev

来自多个表的SQL查询

来自分类Dev

来自多个表的复杂SQL查询

来自分类Dev

来自多个表的SQL LIKE

来自分类Dev

来自多个随机表的sql查询

来自分类Dev

来自多个表的求和?

来自分类Dev

来自多个表的图表

来自分类Dev

来自多个表和列的SQL Pivot

来自分类Dev

SQL View问题:来自多个表的条件计算列

来自分类Dev

来自多个表的SQL查询-联接不起作用

来自分类Dev

SQL查询汇总来自多个不同表的字段

来自分类Dev

SQL 聚合来自多个表的数据并对指定的列求和

来自分类Dev

来自多个表 MySQL 的多个 Where OR

来自分类Dev

来自Power BI中多个表的COUNT DISTINCT值

来自分类Dev

SQL-连接多个表和count()

来自分类Dev

Rails来自多个表的单个结果

来自分类Dev

来自多个表的SugarORM查询?

来自分类Dev

来自多个连接表的总时间

来自分类Dev

计算来自多个表的联接

来自分类Dev

来自多个表的多行的MySQL SUM

来自分类Dev

计算来自多个表的数据

来自分类Dev

汇总来自多个SQLite表的分数

来自分类Dev

来自多个表的PHP SELECT数据

来自分类Dev

MYSQL:来自多个表的平均计数

来自分类Dev

来自多个表的CodeIgniter下拉列表