2016-06-16 4 views
-1

私はFacebookのようなデータベースを持っています。男性の友達、女性の友達、ヌルの友達(性別指定なし)の数を問い合わせるようにクエリに問い合わせます。SUMIFクエリ1行返す

私は今までこのクエリを持っていますが、すべてのユーザーではなく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がなければ、1行を返しますが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

テーブルには1人の友人しかいませんか? :)クエリでgroup byコマンドが見つからない場合、結果をユーザーに伝えたい場合はselect文からfs.user_id_friendを削除するか、すべての列で1つの行を必要とするsqlにすべての列が決して表示されないようにする1より大きい。countfs.user_id_friendまた、合計countの友達が必要な場合は、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

あなたの助けをありがとう!私はそれを得た! –