SQL Join与子查询计算不同表中具有相同ID的记录数

Posted

技术标签:

【中文标题】SQL Join与子查询计算不同表中具有相同ID的记录数【英文标题】:SQL Join with subquery counting number of records with the same id in a different table 【发布时间】:2017-05-10 17:55:35 【问题描述】:

好的,我有三 (3) 个表要合并在一起

tableA 是主要细节,主键是row_id autoincremented tableB 是扩展的详细信息,主/外键是来自 tableA 的row_id tableC 存储特定 row_id 的无序评级和 cmets

我想加入所有这些表,以便查看所有详细信息以及 tableC 中row_id 的实例数和平均评分。

SELECT * 
FROM  `tableA` A
LEFT JOIN  `tableB` B 
      ON A.`row_id` = B.`row_id` 
LEFT JOIN (
     SELECT COUNT( 1 ) AS  'count', Avg(`row_rating`) AS  'avg'
     FROM  `tableC` 
     GROUP BY tableC.`row_id`
)C 
     ON C.`row_id` = A.`row_id` 

ORDER BY  C.`avg` ASC 

此查询的结果正确组合所有但相同的计数和平均值显示在所有行中。

【问题讨论】:

这不是 php。不要这样标记它.. 但是内容是mysql,不包括任何类型的php/php问题 【参考方案1】:

看起来您想在内部查询中按row_id 对记录进行分组。在这种情况下,您需要SELECT row_id 而不是COUNT(1),试试这个:

SELECT * 
FROM  `tableA` A
LEFT JOIN  `tableB` B 
      ON A.`row_id` = B.`row_id` 
LEFT JOIN (
     SELECT row_id, Avg(`row_rating`) AS  'avg'
     FROM  `tableC` 
     GROUP BY tableC.`row_id`
)C 
     ON C.`row_id` = A.`row_id` 

ORDER BY  C.`avg` ASC 

【讨论】:

就是这样,必须将row_id 添加到子查询中。唯一的问题是它会导致行中的重复数据。但它应该可以满足我的需要。 感谢您的快速响应! 要删除重复,您可能需要在外部查询中使用另一个 GROUP BY。但是,在不知道确切输出的情况下很难发表评论。

以上是关于SQL Join与子查询计算不同表中具有相同ID的记录数的主要内容,如果未能解决你的问题,请参考以下文章

如果它们都具有相同的 id,如何将来自 sql 查询的图像存储在不同的变量下?

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

oracle SQL left join()或full out join()根据键排除记录

SQL Join 一对多从满足条件的相同键值组中提取值

如何在一个查询中INNER JOIN 2或3个具有相同表的不同数据库

JOIN列在两个表中具有相同名称时的T-SQL语法缩写?