mySQL - 如何在JOIN中使用COUNT()语句

时间:2017-02-18 14:29:39

标签: mysql

在mySQL数据库中有一个名为clients的表。每个客户行都有一列client_num。要列出所有客户,我只需使用此声明。

SELECT * FROM clients

现在每个客户端可能有或可能没有一些subclients,这些数字列在名为subclients的单独表中,并通过表中的外键client_num引用。

要了解客户端可能拥有多少个子客户端,我可以在单独的调用中查询子客户端表,如下所示:假设我们有一个客户端client_num 254。

SELECT count(1) FROM subclients WEHRE sublicents.client_num = 254

因此查询返回类似0,1,2,3,n

的内容

JOIN我认为我必须做这样的事情:

SELECT 
  c.*,
  sc.????? 
FROM clients AS c
LEFT JOIN subclients AS sc ON sc.client_num = 254 

但是我不知道如何在JOIN中加入count()语句来表示子客户端的数量。另外我不知道LEFT JOIN是否正确。

感谢任何帮助

编辑:

我必须补充一点,我希望从客户端返回all行。附加的返回列COUNT(sc.client_num)比子客户端的数量多。在下面的答案2中,我只获得返回的具有子客户端的客户端。 do not个子客户端的客户端已not返回。如何解决?

2 个答案:

答案 0 :(得分:0)

我从Stack Overflow上的类似查询中读到的解决方案是使用子选择。如果您加入的唯一目的是To,我会建议您不需要加入。那样:

Count

然后对于一行客户端,他们将有一个列SELECT clients.*, (SELECT COUNT(*) FROM subclients WHERE subclients.client_num = clients.id ) AS numb FROM clients WHERE .... ,该列将是该客户端拥有的子客户端数。

A reference

答案 1 :(得分:0)

您可以使用以下查询来获取每个客户端的所有子客户端的计数:

SELECT 
    c.*,
    COUNT(sc.client_num) 
FROM clients AS c
LEFT JOIN subclients AS sc ON sc.client_num = c.client_num
WHERE c.client_num = 254 
GROUP BY sc.client_sum

使用子选择的解决方案:

SELECT *, (SELECT COUNT(*) FROM subclients WHERE client_num = clients.client_num) 
FROM clients 
WHERE client_num = 254
  

演示: http://sqlfiddle.com/#!9/4930a/8/1