2016-06-16 84 views
-1

我有一個像Facebook一樣的數據庫。一個查詢要求我計算多少男性朋友,女性朋友和空性朋友(沒有性別特徵)。SUMIF查詢返回一行

我有這個查詢到目前爲止,但它只返回1行,不是所有的用戶。

create or replace view friends as 

select fs.user_id, 
     fs.user_id_friend, 
     sum(if(fs.sex = 'M', 1, 0)) as Male_Friends, 
     sum(if(fs.sex = 'F', 1, 0)) as Female_Friends, 
     sum(if(fs.sex = ' ', 1, 0)) as Friends_Undefined_Sex 
from friends_sex fs; 

這打印我只有一行ans我需要它打印所有的用戶,任何人都可以請幫我嗎?

如果您需要更多關於表格或意見的信息,請點擊此處,我​​對這個論壇很陌生,請原諒我的錯誤。

+0

'GROUP BY fs.user_id' – Alex

+0

您可以發佈一些示例數據以及預期輸出嗎? –

+0

示例輸出應該是這樣的; USER_ID | MALE_FRIENDS | FEMALE_FRIENDS | FRIENDS_UNDEFINED_SEX 1 | 5 | 2 | 4 2 | 4 | 3 | 2 我不需要user_id_friend列,它只是用於測試。 –

回答

1

您的查詢格式錯誤。問題是你有select(如'fs.user_id ) that are not in the group by`中的列,這在MySQL中是允許的,但在其他數據庫中是不允許的,它往往只會導致混淆

由於聚合函數,查詢聚集查詢,而一個group by它返回一行所以你需要一個group by:。

select fs.user_id, 
     sum(fs.sex = 'M') as Male_Friends, 
     sum(fs.sex = 'F') as Female_Friends, 
     sum(fs.sex = ' ') as Friends_Undefined_Sex 
from friends_sex fs 
group by fs.user_id; 

注意,在MySQL中,你不需要if()的MySQL把布爾爲整數整數上下文,與「1」爲真,「0」爲假。

另外請注意,沒有fs.user_id_friend返回;據推測,很多人有不止一個朋友。如果你想要一個列表,然後包括:

group_concat(fs.user_id_friend) 

得到一個以逗號分隔的朋友ID的列表。

1

表中只有一個朋友嗎? :)你在查詢中缺少一個group by命令來告訴sql你想要用戶的結果,也從你的select語句中刪除fs.user_id_friend,或者你告訴sql你想爲每一個朋友一行,在這種情況下,所有的列都不會大於1.你也可以countfs.user_id_friend如果你想要一個總共count的朋友。

create or replace view friends as 

select fs.user_id, 
     count(fs.user_id_friend) AS NumberOfFriends, 
     sum(if(fs.sex = 'M', 1, 0)) as Male_Friends, 
     sum(if(fs.sex = 'F', 1, 0)) as Female_Friends, 
     sum(if(fs.sex = ' ', 1, 0)) as Friends_Undefined_Sex 
from friends_sex fs 
GROUP BY fs.user_id; 
+0

我認爲這正是我需要的,我會嘗試一下。就像我說過的,我不需要fs.user_id_friend專欄,它只是用於測試。 –

+0

希望它能幫助你 – Matt

+0

感謝您的幫助!我明白了! –