2014-10-31 104 views
0

我有指公司插槽量的數據庫,這些插槽可充滿人.. 我想做一個查詢在那裏我可以看到哪些公司仍然有開口槽SQL集團子查詢忽略

這是我正在嘗試的查詢,但它給了我錯誤的結果。

select 
    name, 
    slots, 
    (select count(*) from persons) as persons 
from companies 
where city_id = 3 
group by companies.id 

這應該給我一個表的插槽,以及personsfilled該公司在個人表的數額,但它的返回人員的每一次的總量。

這是結果

enter image description here

謝謝!

+2

您必須compianies表或其他聯繫的人士表知道如果人使用的插槽。我認爲你必須檢查你的表格結構。 – 2014-10-31 09:30:17

+0

顯示兩個表的表結構,並且您的查詢將返回相同的數字,因爲您每次都從人表計數數據。 – 2014-10-31 09:31:46

回答

2

就像@JoeTaras說的,你需要加入人和公司能夠告訴/計算哪些人屬於哪個公司。如果你不以某種方式加入,公司和個人將被獨立處理和計算,這通常不是很有用。

確實可以使用不同的子查詢,但這並不完全如此,並且可能比直接連接性能低。

例子:

select 
    companies.id 
    companies.name, 
    companies.slots, 
    count(persons.id) 
from companies 
left outer join persons on companies.id = persons. ... 
where companies.city_id = 3 
group by companies.id, companies.name, companies.slots 
+0

非常感謝!它也適用於:GROUP BY companies.id ..這個查詢如何工作?我不應該使用子查詢呢?謝謝! – Notflip 2014-10-31 09:34:11

+1

MySQL [擴展GROUP BY子句](http://stackoverflow.com/a/7596265/1048425)允許選擇列表中不包含在組中的列。如果'companies.ID'是主鍵(這似乎是合乎邏輯的),那麼只有通過這種分組纔是完全合法的,因爲'公司'中的所有其他字段在功能上依賴於此。這種擴展的問題出現在你濫用它的時候,例如,如果你只用'companies.name'進行分組,然後選擇'companies.id' - 如果你有兩家公司有相同的名稱和不同的ID,那麼返回的值是'ID'不是確定性的。 – GarethD 2014-10-31 09:40:29

+0

對於正確的答案也+1,但是提供即使是你已經做了什麼來解決問題和原因的簡單解釋也會好得多。代碼只有答案有限的使用,並沒有解決作爲一個問題和答案網站,而不是一個免費的代碼寫作服務的真正目的的Stackoverflow。正如老諺語所說,「給一個人一條魚,你給他一天的時間;教一個人釣魚,你給他一輩子」 – GarethD 2014-10-31 09:43:04