繁体   English   中英

具有双SUM语句的SQL查询

[英]SQL query with double SUM statements

有2个表格:-主题-帖子

帖子具有“评分”功能:

topic 1, post 1, rating 2
topic 1, post 1, rating 2
topic 1, post 2, rating 1

主题具有“视图”功能:

topic 1, views 5
topic 1, views 3

我想获取所有主题的帖子评分总和和所有主题的总观看次数。 我最糟糕的 SQL:

SELECT
  forum_id,
  topic_id,
  SUM(t1.rating),
  SUM(t2.views)
FROM
  posts t1
LEFT JOIN
  topics t2 ON t1.topic_id = t2.topic_id
GROUP BY
  t1.topic_id

我认为,由于返回原因,返回的值不正确,它们需要分组2次。

我可以做什么来解决?

阅读响应后添加:

SELECT
    t1.`forum_id`,
    t1.`topic_id`,
    SUM(t1.`rating`) AS rating,
    t3.`views` AS views
FROM
    `forum_ratings_posts` t1
LEFT JOIN (
    SELECT
        SUM(t2.`views`) AS views,
        t2.`topic_id`
    FROM
        `forum_ratings_topics` t2
    GROUP BY
        t2.`topic_id`
) t3 ON t1.`topic_id` = t3.`topic_id`
GROUP BY
    t1.`topic_id`

看看是否有帮助。 这种方法在派生表上使用LEFT JOIN ,并在该派生表中对主题表进行汇总。 LEFT JOIN将确保您从posts表中获得一个条目,而不管主题表中是否存在相应的条目。 如果您需要更多信息,请与我们联系。

SELECT
  t1.forum_id,
  t1.topic_id,
  SUM(t1.rating),
  temp.t2_sum
FROM
    posts t1
LEFT JOIN
    (SELECT SUM(views) AS t2_sum, topic_id FROM topics GROUP BY 
topic_id) AS temp 
ON t1.topic_id = temp.topic_id
GROUP BY
 t1.topic_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM