sql >> データベース >  >> RDS >> Mysql

MySQL-GROUPBYを使用した条件付きCOUNT

    droid_vが0、1、2、3、または4のみである場合、可能な値は5つしかないため、COUNT(DISTINCT)が5を超える値を返すことはありません。それはあなたが望むものですか?もしそうなら、これを試してみてください:

    SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v ELSE 0 END) - 1 AS droid /* -1 for the case where droid_v is 0 */
         , COUNT(DISTINCT sig_v) AS sig
         , SUM(NoExt)  AS hits
    

    更新: おっと、申し訳ありませんが、 がない可能性があるため、上記は正しくありません。 ゼロ。次のようになります:

    SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
    

    一方、droid_v> 0であるすべての行のカウントが必要な場合は、これが必要だと思います:

    SELECT puid, SUM(CASE WHEN droid_v > 0 THEN 1 ELSE 0 END) AS droid
         , COUNT(DISTINCT sig_v) AS sig
         , SUM(NoExt)  AS hits
    

    これがお役に立てば幸いです。



    1. OR演算子SQLServerでの短絡

    2. 高可用性のためにChamiloMySQLデータベースをデプロイする方法

    3. Oracle SQL、複数の列を連結してテキストを追加

    4. OracleでのBase64エンコーディングとデコーディング