sql select count,count和count of

时间:2015-10-18 07:04:27

标签: mysql nested-queries

我有这个查询返回不同的列和列的计数。它完美无缺。

 SELECT DISTINCT w.title, w.date ,COUNT(f.fid) AS f_count , GROUP_CONCAT(name)  
FROM Faculty f 
INNER JOIN Attend a ON a.fid = f.fid 
INNER JOIN Workshop w ON w.wid = a.wid 
WHERE f.did = 1 
GROUP BY w.title 
ORDER BY w.wid

除了这些字段之外,我还想返回f_count列的SUM。我试图使用像这样的嵌套查询:

SELECT title, date,f_count ,names,COUNT(f_count) AS total_f 
FROM (SELECT DISTINCT w.title AS title, w.date AS date,COUNT(f.fid) AS f_count , GROUP_CONCAT(name) AS names  
FROM Faculty f 
INNER JOIN Attend a ON a.fid = f.fid 
INNER JOIN Workshop w ON w.wid = a.wid 
WHERE f.did = 1 
GROUP BY w.title 
ORDER BY w.wid) AS total_fac

SUM将返回正确的值,但我只从内部查询中收到一行。 我知道IN和ANY从子查询返回多行,但我不知道如何在我的情况下使用它。

我的问题是: 如何获取所有行+ COUNT的SUM?

我在这里看了其他问题,但没找到我要找的东西。

2 个答案:

答案 0 :(得分:0)

您的子查询返回一行,因为您的计数总和实际上是没有COUNT(*)子句的结果集/初始GROUP BY的大小,

由于GROUP BY,您的日期字段也是随机选择的,这是一个不同的问题。

要将此值放在所有行上是没有必要的。您可以在没有GROUP BY的情况下再次运行相同的查询。

编辑:我最初建议您将计数绑定到第二个查询但我已经把它拿出来因为我改变了主意。

答案 1 :(得分:0)

@Octopi的答案帮助我弄清楚我的查询有什么问题以及如何正确处理。

我想要的是" 数字"来自参加过任何研讨会的部门的DISTINCT教员。但是,我在问题中发布的上一个查询给了我" 总和"参加研讨会的教职员工(并不明显)。

所以我的方法开始时并不正确。因此,我按原样离开了第一个查询并创建了一个第二个查询,以获取我需要的DISTINCT教员数量如下:

SELECT COUNT(name) AS total_fac FROM (SELECT DISTINCT name
FROM Faculty f 
INNER JOIN Attend a ON f.fid = a.fid 
WHERE f.did = 1) AS total
这让我想到了我想去的地方。与你讨论这个问题帮助我实现了目标

谢谢:)