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

带有 LEFT JOIN 和 MAX 的 LibreOffice HSQLDB WHERE 子句?

带有子查询语法的 LEFT OUTER JOIN

SQL IF 和 LEFT JOIN 导致数据库出现故障