2015-10-18 125 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 

這讓我在哪裏,我想。和您討論這個問題幫我那裏

謝謝:)