73903


下記のテーブル3つから、必要なデータを取得したいです。

[code]

    テーブル名：test1
    カラム名
    id
    p_id  test2.p_id と紐づきます
    point (1～3が入ります)
    
    テーブル名：test2
    カラム名
    id
    p_id
    s_id  test2.s_id と紐づきます
    
    テーブル名：test3
    カラム名
    id
    s_id
    u_id  こちらのカラムがs_idのグループになります。
    
[/code]

取得したいデータは、u_id,point1(1の件数),point2(2の件数),point3(3の件数) のリストを取得したいです。

[code]

    select u_id,count(point) from test3 
    left join test2 on test3.s_id = test2.s_id 
    left join test1 on test1.s_id = test3.s_id 
    where point = 1 group by u_id
    
[/code]

上記を実行致しますと、u_id,point1(1の件数)
のリストしか取得できません。point2(2の件数),point3(3の件数)を取得したい場合、どのようにSQLを記述すればいいでしょうか。ご教授頂けますと助かります。


CC BY-SA 4.0
2021-02-09T14:33:50.070
73895
2021-02-10T03:35:08.213
42792
question
mysql
mysql文の作成についてご質問がございます。


[条件付COUNT](https://accelboon.com/tn/mysql-%E6%9D%A1%E4%BB%B6%E3%81%A4%E3%81%8D%E3%81%A7count%E3%80%81sum%E3%80%81avg%E3%81%99%E3%82%8B/)で対応可能です。

COUNTは[nullを計上しない](https://www.softel.co.jp/blogs/tech/archives/3267)特性を活かすために`{条件式}
or null`を記述することがポイントです。

[SQL Fiddle](http://sqlfiddle.com/#!9/c133e3/3)

[code]

    select u_id,
           count(point=1 or null) point1,
           count(point=2 or null) point2,
           count(point=3 or null) point3
    from test3 
    left join test2 on test3.s_id = test2.s_id 
    left join test1 on test1.p_id = test3.p_id -- 質問文のs_idをp_idに書き換え
    group by u_id
    
[/code]


CC BY-SA 4.0
2021-02-10T03:35:08.213
73903
2021-02-10T03:35:08.213
9820
73895
answer