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

CASEを使用してSQLリクエストを実行する方法

    間違っていることがたくさんあるので、どこから始めればよいのかわかりません。

    CASEの2つの形式を混同しています 表現。 1つの形式は次のとおりです:

    CASE <expression>
        WHEN <value> THEN <result>
        WHEN <value> THEN <result>
        ...
    END
    

    もう1つは:

    CASE
        WHEN <condition> THEN <result>
        WHEN <condition> THEN <result>
        ...
    END
    

    SELECTを使用しようとしています 値としてクエリを実行しますが、FROMがありません 句であり、値として使用するには、クエリを括弧で囲む必要があります。これを同じテーブルからクエリする必要があると思われます。その場合、サブクエリを実行するのではなく、メインクエリで集計関数を使用する必要があります。

    CASE 式はSELECTの一部である必要があります FROMの後ではなくリスト 条項。

    ケースごとに出力に個別の列を作成する場合は、1つのCASEに含めることはできません。 表現。

    すべてのテーブル名と列名は二重引用符で囲みます。MySQLはバッククォートを使用して名前を引用します。

    SELECT DISTINCTは必要ありません GROUP BYを使用する場合 。

    SELECTでエイリアスを参照することはできません GROUP BYを除いて、同じクエリにリストします 、ORDER BY 、およびHAVING

    次のようになります:

    SELECT MONTH(Facturation) AS month, LRU, Client,
        AVG(CASE WHEN MONTH(Factuation) = 1 AND Facturation BETWEEN 1 AND 6
            THEN Montant_fac_eur END) AS c1,
        AVG(CASE WHEN MONTH(Factuation) = 2 AND Facturation BETWEEN 2 AND 7
            THEN Montant_fac_eur END) AS c2,
        AVG(CASE WHEN MONTH(Factuation) = 3 AND Facturation BETWEEN 3 AND 8
            THEN Montant_fac_eur END) AS c3,
        AVG(CASE WHEN MONTH(Factuation) = 4 AND Facturation BETWEEN 4 AND 9
            THEN Montant_fac_eur END) AS c4,
        ...
    FROM foundry_sync.data
    GROUP BY `LRU`, `Client`, `Facturation`
    ORDER BY Client, month
    


    1. 関連するタグ検索用にMYSQLデータベースを設定する正しい方法は?

    2. MySQLFULLTEXTは複数のフィールドでは機能しません

    3. MySQLに挿入するときに列をスキップする

    4. MySQLの問題LOADXMLINFILE