bugfix> mysql > 投稿

私は、ボランティアが利用可能なシフトを提出する「ローター」テーブルを持っています。 6を超えるシフトを送信できますが、6が最低限必要です。

各シフトを選択したボランティアの数を確認したいが、6つのシフトを選択したボランティアのみを表示したい。

間違ったSQLを実行していますが、間違っていることを理解できません:

SELECT COUNT(volunteer_id), shift_id 
FROM rota 
GROUP BY shift_id 
WHERE COUNT(shift_id = 6);

編集: 私がやろうとしていたことを間違って説明しました。

各シフトを選択したボランティアの数を確認したいのですが、6つのシフトのみを提出したボランティアによって選択されたシフトのみを表示したいです。理にかなっていますか

編集:

これを試してみましたが機能しませんでした:

SELECT COUNT(volunteer_id), shift_id 
FROM rota
WHERE volunteer_id IN (SELECT volunteer_id FROM rota
GROUP BY volunteer_id HAVING COUNT DISTINCT(shift_id) = 6)
GROUP BY shift_id;

回答 2 件
  • 以下で試すことができます-

    SELECT volunteer_id,COUNT(shift_id )
    FROM rota 
    GROUP BY volunteer_id
    having COUNT(shift_id )= 6
    
    

  • HAVING を使用する  句:

    SELECT COUNT(volunteer_id), shift_id 
    FROM rota
    WHERE volunteer_id IN (SELECT volunteer_id FROM rota
                           GROUP BY volunteer_id HAVING (COUNT DISTINCT shift_id) = 6)
    GROUP BY shift_id 
    HAVING COUNT(volunteer_id) = 6;
    
    

    GROUP BYに行われるアサーション   HAVING に登場する必要がありました  句。 HAVING  レコードのグループを操作します。ザ・ WHERE  一方、句は GROUP BY の前に評価されます 、および個々のレコードで動作します。

あなたの答え