SQL 2 Left Join 在一个带有计数的查询中
Posted
技术标签:
【中文标题】SQL 2 Left Join 在一个带有计数的查询中【英文标题】:SQL 2 Left Join in one query with count 【发布时间】:2016-06-11 08:02:23 【问题描述】:我有一个 SQL 查询:
SELECT table1.column1, table2.column2, table1.column2
FROM table1 LEFT JOIN table2 (ON table1.column1=table2.column2)
我想要做的是向表中添加另一个左连接,但也要计入该左连接数据,例如:
SELECT table1.column1, table2.column2, table1.column2, COUNT(table3.column1)
FROM table1 LEFT JOIN table2 ON table1.column1=table2.column2
LEFT JOIN table3 ON table1.column1=table3.column1
代码似乎不起作用,可能是什么问题?
【问题讨论】:
“似乎不起作用”不是有效的问题描述。你有错误吗?结果不正确?还有什么? mysql 和 SQL Server 是两种不同的产品(具有一些非常不同的行为),您实际上拥有哪一种?由于我们在进行聚合,我们还需要知道行的分布(因为COUNT(...)
否则可能返回不正确的结果);数据是什么样的?
【参考方案1】:
count
是一个聚合函数 - 如果没有 group by
子句,您不能将它与单行函数混合使用。解决此问题的一种方法是加入子查询而不是直接加入 table3
并在此处应用 group by
:
SELECT table1.column1, table2.column2, table1.column2, cnt
FROM table1
LEFT JOIN table2 ON table1.column1 = table2.column2
LEFT JOIN (SELECT column1, COUNT(*) AS cnt
FROM table3
GROUP BY column1) table3 ON table1.column1=table3.column1
【讨论】:
以上是关于SQL 2 Left Join 在一个带有计数的查询中的主要内容,如果未能解决你的问题,请参考以下文章
带有 LEFT JOIN 和 GROUP BY 的 COUNT(*) 在 MySQL 中包含 NULL
带有 WHERE 子句的 GROUP BY 以及 sql 中的 OR 的 LEFT JOIN
如何将带有 LEFT JOIN 的 SQL 转换为 EF CORE 3 LINQ