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

MySQLとCASEWHENと値の範囲

    これを試してください:

    SELECT count(*) as ct, 
    CASE  
        WHEN COUNT(*) < 25 THEN '1-25' 
        WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
        WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
        WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
        WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
        WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
        ELSE '1000+' 
    END AS grp 
    FROM records r, accounts a 
    WHERE r.account_id=a.id 
    GROUP BY r.account_id, a.id, 
        CASE  
        WHEN COUNT(*) < 25 THEN '1-25' 
        WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
        WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
        WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
        WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
        WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
        ELSE '1000+' END
    ORDER BY count(*)
    

    元のデータ行を集約する「バケット」を「定義」する必要があります...これがGroupBy句の目的です...これは、ベーステーブルの各行を分析する基準を定義します。データが集約される「バケット」を決定します...groupby句で定義された1つまたは複数の式は、それらのバケットの「定義」です。

    クエリが元のデータ行を処理すると、この式の値が既存のバケットと同じであるすべての行がそのバケットに集約されます...既存のバケットで表されていない値を持つ新しい行バケットにより、新しいバケットが作成されます...



    1. SQL Server(T-SQL)からHTMLメールを送信する方法

    2. MySQL構文エラーメッセージオペランドには1つの列が含まれている必要があります

    3. mysqlのデータ行から改行文字を削除するにはどうすればよいですか?

    4. Djangoのmanage.pyCLIを使用してデータベースからすべてのテーブルを削除するにはどうすればよいですか?