【问题标题】:Combine mysql count(*) for two different tables same column为两个不同的表相同的列组合mysql count(*)
【发布时间】:2018-01-09 18:30:53
【问题描述】:

我有两个存储来自两个不同用户的 cmets 的表

Table1

id_table1 | comment | id_user | id_post

Table2

id_table2 | comment | id_someOtherUser | id_post

我真的很想在这两张表中只做一张,因为 cmets 发布在同一个帖子上,但我不能,因为我有两个不同的 id 用于两种不同类型的用户。

我的问题是如何按两个表中的 cmets 数量列出所有帖子 DESC?

如果我做类似的事情

SELECT P.*, count(*) as count from Table1 AS T1
LEFT JOIN post AS P ON T1.id_post = P.id_post GROUP BY P.id_post ORDER BY count DESC

然后我有 table1 的帖子,table2 也可以这样做,但是如何将两个表中的 cmets 合并到同一个帖子中?

【问题讨论】:

  • 您可以使用UNION

标签: mysql select count


【解决方案1】:

我会使用UNION ALL 将两个评论表组合成一个通用格式,然后使用JOIN

SELECT P.*, TC.count
FROM (
    SELECT Ts.id_post, count(*) AS count
    FROM (
          SELECT id_post FROM Table1
          UNION ALL
          SELECT id_post FROM Table2
    ) AS Ts
    GROUP BY Ts.id_post
) AS TC
LEFT JOIN post AS P ON TC.id_post = P.id_post
GROUP BY P.id_post
ORDER BY TC.count DESC

【讨论】:

  • 这正是我想要的,谢谢!我自己尝试过 UNION ALL,但它没有锻炼,因为我只用一个外部 SELECT 来做,所以我错过了 id_post
  • 三个SELECTs 无疑是矫枉过正,但我​​觉得它会更容易理解。
【解决方案2】:

解决这个问题的一种方法是对每个表进行单独的计数,然后进行完全外连接,并获取每个计数的总和:

SELECT id_post, (count1 + count2) AS total_count FROM (SELECT id_post, count(*) as count1 from Table1 AS T1 FULL OUTER JOIN (SELECT id_post, count(*) as count2 from Table2 AS T2) USING(id_post)) ORDER BY total_count DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多