0
我有這樣一個模式:如何在一個SQL查詢中獲得多個列的計數?
PetOwner:
owner_id | first_name | last_name
---------------------------------
1 | john | smith
2 | jane | doe
3 | jack | jones
Pets:
pet_id | owner_id | name | type
-------------------------------
1 | 1 | a | dog
2 | 1 | b | dog
3 | 1 | c | dog
4 | 1 | d | cat
5 | 1 | e | cat
6 | 1 | f | fish
7 | 2 | g | dog
8 | 2 | h | dog
9 | 2 | i | fish
10 | 3 | j | dog
而且我想編寫一個查詢,讓我:
first_name | last_name | dog_count | cat_count | fish_count
-----------------------------------------------------------
john | smith | 3 | 2 | 1
jane | doe | 2 | 0 | 1
jack | jones | 1 | 0 | 0
有一組已知的寵物類型,所以這並不需要爲任意類型創建一個列。另外,任何沒有特定類型寵物的所有者應該爲該寵物類型計數0。
我已經嘗試過類似的查詢:
SELECT first_name, last_name, owner_id, type, COUNT(*)
FROM Pets, PetsOwner
GROUP_BY owner_id, type
這將產生:
first_name | last_name | owner_id | type | COUNT(*)
---------------------------------------------------
john | smith | 1 | dog | 3
john | smith | 1 | cat | 2
john | smith | 1 | fish | 1
jane | doe | 2 | dog | 2
jane | doe | 2 | fish | 1
jack | jones | 3 | dog | 1
但是這需要遍歷結果集來得到我要找的輸出,很明顯的東西避免與SQL。此外,它不提供表中缺少的寵物類型的默認值0。
是否可以用一個SQL查詢做到這一點?如果沒有,是否有我能做的查詢比我找到的查詢更好(即更容易處理)?
這是一個MySQL數據庫,如果這有所作爲。
感謝您的幫助。