mysql - 带有连接的 SQL 查询计算每条记录的多个结果按计数排序

标签 mysql sql statistics analytics

我有一个名为 Request 的表。
其他表通过请求 ID 链接到请求表。 有一个 TwitterTweet 表和一个 FacebookPost 表。 因此,单个请求可以有 50 条 Twitter 推文和/或 20 条 Facebook 帖子或任意数量的推文/帖子 我们可以将它们加在一起,总数为 70。

我正在尝试创建一个查询,该查询可以告诉我总计数最高的请求是什么。

我知道这是错误的: (我试图按照 TwitterTweet 中的计数对它们进行排序,但它不允许我执行我认为的 OUTER JOIN 将带回 Count.count 列。它迫使我进行左连接才能编译。我的逻辑是加入所以 结果是根据 requestid 计算每行的结果)

SELECT r1.`id` AS requestid, r1 . * 
FROM  `Request` AS r1
LEFT JOIN 

(SELECT COUNT( * ) AS count, rid
FROM 

((SELECT  `TwitterTweet`.`id` AS  `smid` ,  `TwitterTweet`.`requestid` AS rid
FROM  `TwitterTweet` 
WHERE  `TwitterTweet`.`requestid` = requestid
AND  `TwitterTweet`.`active` =1) AS talias

)) AS Count ON ( Count.rid = requestid ) 
ORDER BY Count.count

*当我尝试添加到 Facebook 端时,它无法再编译 (概念是将 TwitterTweet 的结果与 FacebookPost 的结果相加 它们附加到特定的 requestid 上,这将为我们提供计数。整个结果 集合应按该计数排序)

SELECT r1.`id` AS requestid, r1 . * 
FROM  `Request` AS r1
LEFT JOIN 

(SELECT COUNT( * ) AS count, rid
FROM 

((SELECT  `TwitterTweet`.`id` AS  `smid` ,  `TwitterTweet`.`requestid` AS rid
FROM  `TwitterTweet` 
WHERE  `TwitterTweet`.`requestid` = requestid
AND  `TwitterTweet`.`active` =1 ) AS talias 

UNION All

(SELECT `FacebookPost`.`id` AS  `smid`, `FacebookPost`.`requestid` AS rid
FROM  `FacebookPost`
WHERE  `FacebookPost`.`requestid` = requestid
AND  `FacebookPost`.`active` = 1) as falias 

)) AS Count ON ( Count.rid = requestid ) 
ORDER BY Count.count

我更新了查询并尝试添加别名:

SELECT rid, SUM(count) total_count

FROM 

(
(SELECT COUNT(*) AS count, r.rid
FROM   request r
       JOIN TwitterTweet tt
       ON r.id = tt.requestid
WHERE  tt.active = 1
GROUP BY r.rid) AS twitter

UNION ALL

(SELECT COUNT(*) AS count, r.rid
FROM   request r
       JOIN FacebookPost fp
       ON r.id = fp.requestid
WHERE  fp.active = 1
GROUP BY r.rid ) AS fbook
)

GROUP BY rid

ORDER BY SUM(count) DESC

我进行了另一项调整,为中间子查询提供了别名,但现在我只返回一行,rid 列中返回零,total_count 列中返回 5686...5686 可能是所有结果。

SELECT counts.rid, SUM(count) total_count

FROM 

(
SELECT COUNT(*) AS count, r.requestid AS rid
FROM   request r
       JOIN TwitterTweet tt
       ON r.id = tt.requestid
WHERE  tt.active = 1
GROUP BY r.requestid

UNION ALL

SELECT COUNT(*) AS count, r.requestid AS rid
FROM   request r
       JOIN FacebookPost fp
       ON r.id = fp.requestid
WHERE  fp.active = 1
GROUP BY r.requestid
) AS counts

GROUP BY counts.rid

ORDER BY SUM(count) DESC

明白了!!! 感谢你们的帮助,我不得不根据请求删除这些连接:

SELECT counts.rid, SUM(count) total_count

FROM 

(
SELECT COUNT(*) AS count, tt.requestid AS rid
FROM  TwitterTweet tt
WHERE  tt.active = 1
GROUP BY tt.requestid

UNION ALL

SELECT COUNT(*) AS count, fp.requestid AS rid
FROM   FacebookPost fp
WHERE  fp.active = 1
GROUP BY fp.requestid
) AS counts

GROUP BY counts.rid

ORDER BY SUM(count) DESC

最佳答案

SELECT id, SUM(count) total_count

FROM 

(
SELECT COUNT(*) AS count, r.id
FROM   request r
       JOIN TwitterTweet tt
       ON r.id = tt.requestid
WHERE  tt.active = 1
GROUP BY r.id

UNION ALL

SELECT COUNT(*) AS count, r.id
FROM   request r
       JOIN FacebookPost fp
       ON r.id = fp.requestid
WHERE  fp.active = 1
GROUP BY r.id
) sub

GROUP BY id

ORDER BY SUM(count) DESC
;

关于mysql - 带有连接的 SQL 查询计算每条记录的多个结果按计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846208/

相关文章:

mysql - 子查询选择作为归档

java - 如何在 jooq 中创建多列子查询

machine-learning - 关于机器学习中内核技巧的直觉

api - 从 TeamCity API 获取统计历史

r - 如何获得 R 多项回归中预期结果百分比的置信区间?

mysql - SQL Error : 1054, SQLState : 42S22 , Spring Boot jpa 应用程序中 'NaN' 中的未知列 'field list'

mysql - resolveip 某些域但错误?

mysql - SQL JOIN 两个表与 AVG

c# - 为什么要使用 DataSet.BeginInit 和 DataSet.EndInit

mysql - 计算 ID 并在查询中选择它