Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按提交总数选择用户_Mysql - Fatal编程技术网

Mysql 按提交总数选择用户

Mysql 按提交总数选择用户,mysql,Mysql,我知道这很简单,但它让我发疯 我有一个用户表、评论表和图片表 我想要一个名单的前10名用户的基础上提交的意见和他们提交的照片总数 就这样 真丢人 更新:根据Ed的回答 以下是我的设置: 用户表用户id、用户名 图像表img_id,提交者为_id=users.user_id 注释表id,由用户id=users.user\u id提交 最后一个问题是: select submittedby_id, sum(total) from (select submittedby_id, co

我知道这很简单,但它让我发疯

我有一个用户表、评论表和图片表

我想要一个名单的前10名用户的基础上提交的意见和他们提交的照片总数

就这样

真丢人

更新:根据Ed的回答

以下是我的设置:

用户表用户id、用户名 图像表img_id,提交者为_id=users.user_id 注释表id,由用户id=users.user\u id提交 最后一个问题是:

    select submittedby_id, sum(total)
from 
    (select submittedby_id, count(img_id) as total from    
          images group by submittedby_id 
     union 
     select submittedby_id, count(id) as total from 
          comments group by submittedby_id
    ) as x
 group by submittedby_id 
 order by sum(total) desc limit 10;

psuedocode当然可以,但您需要以下内容:

select 
  u.userid
, count(commentID) + count(photoID) as totalsubmissions 
from users u
left outer 
    join comments c
    on u.userid = c.userid 
left outer 
    join pictures p 
    on u.userid = p.userid 
group by 
    u.userid 
order by 2 desc 
fetch first 10 rows only
select username, sum(submissions) 
from 
    (select username, count(picture_id) from    
          pictures group by username 
     union 
     select username, count(comment_id) from 
          comments group by username
    )
 group by username 
 order by sum(submissions) desc limit 10;

也许是这样的:

select 
  u.userid
, count(commentID) + count(photoID) as totalsubmissions 
from users u
left outer 
    join comments c
    on u.userid = c.userid 
left outer 
    join pictures p 
    on u.userid = p.userid 
group by 
    u.userid 
order by 2 desc 
fetch first 10 rows only
select username, sum(submissions) 
from 
    (select username, count(picture_id) from    
          pictures group by username 
     union 
     select username, count(comment_id) from 
          comments group by username
    )
 group by username 
 order by sum(submissions) desc limit 10;
从概念上概述:

统计每个表中用户提交的内容 合并这些,这样每个用户都将从子查询中获得0到2个计数。 再分组一次,将两个计数相加,然后按顺序排列,使最高数量位于顶部。 希望这有帮助。

调整Ed的答案:

select submittedby_id, sum(submissions) 
from 
    (select submittedby_id, count(img_id) as submissions from    
          images group by submittedby_id 
     union all
     select submittedby_id, count(id) as submissions from 
          comments group by submittedby_id
    ) as x
 group by submittedby_id 
 order by sum(submissions) desc limit 10

我相信你想在这里进行联合,只要联合就可以忽略看起来相同id和提交计数的记录。

总提交计数将是错误的,因为评论和图片之间存在笛卡尔积。不过,如果只需要对顶级用户进行排序,那也没关系。啊,你说得对。Ed的帖子实际上是更准确的方法。1248-每个派生表都必须有自己的别名。。。我是不是在什么地方漏了一个as z?是的,在右括号后面和groupby之前加上一个as x。这是这里的正确答案。