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()根据键排除记录