【问题标题】:SQL Join with subquery counting number of records with the same id in a different tableSQL Join与子查询计算不同表中具有相同ID的记录数
【发布时间】: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问题

标签: php mysql


【解决方案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。但是,在不知道确切输出的情况下很难发表评论。
猜你喜欢
  • 2019-11-29
  • 2017-04-23
  • 2021-03-18
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多