2015-10-18 91 views
0

我有这个查询返回不同的列和列的数量。它工作得很好。sql选择列,计数和总数

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的总和?

我已经看过其他问题,但没有找到我正在寻找的东西。

+0

您是'组由一列by'ing,因此计数的总和将是将它是否被返回的所有行数没有在那里,我正确吗? –

+0

事情是我需要GROUP By来选择不同的值。如果我删除GROUP BY查询将返回多余的值 – Alsmayer

回答

0

你的子查询返回一行,因为你数的总和实际上是你的结果集/大小inital COUNT(*)没有GROUP BY条款,

而且您的日期字段是随机选择的,因为GROUP BY的,这是一个不同问题。

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

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

+0

我被告知是正确的查询。 我是透明度的粉丝。 有时。 –

+0

问题的第一行。 “我有这个查询返回不同的列和列的数量,它工作得很好。” –

+0

看看我的编辑。 –

0

@Octopi的答案帮助我找出了我的查询出了什么问题,以及如何正确地解决问题。

我想要的是来自部门的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 

这让我在哪里,我想。和您讨论这个问题帮我那里

谢谢:)