cakephp3 にて,messageテーブルから 各ユーザに届いた男女別のメッセージ件数を取得する際、以下のSQL
SELECT receiver_id,
COUNT( CASE WHEN is_male = 0 THEN sender_id END) AS is_male_count,
COUNT( CASE WHEN is_male != 0 THEN sender_id END) AS not_male_count
FROM messages
group by receiver_id
を 以下のcakphp3 のクエリービルダーで実行できますが
php
1$q = $Messages->find()->group(['receiver_id']); 2$male_case = $q->newExpr() 3 ->addCase( 4 $q->newExpr()->add(['is_male ' =>0]), 5 'sender_id', 6 'integer' 7 ); 8 9$not_male_case = $q->newExpr() 10 ->addCase( 11 $q->newExpr()->add(['is_male !=' =>0]), 12 'sender_id', 13 'integer' 14 ); 15 16$result = $q->select([ 17 'male_count' => $q->func()->count($male_case ), 18 'not_male_count' => $q->func()->count($not_male_case ) 19 ]); 20
これに加えて、 送信ユーザ数を男女別に取得したいので distinctを以下のように加えたいのですが、クエリービルダーではどのようにdistinctを記述すればいいでしょうか?
SELECT receiver_id,
COUNT( DISTINCT(CASE WHEN is_male = 0 THEN sender_id END)) AS is_male_count,
COUNT( DISTINCT(CASE WHEN is_male != 0 THEN sender_id END)) AS not_male_count
FROM messages
group by receiver_id
あなたの回答
tips
プレビュー