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

MySQLエイリアスフィールドを一緒に追加する

    データベースエンジンで実行される順序は次のとおりです。

    これは、物事がどのように実行されるかについてのセマンティックビューであり、データベースは異なる順序で物事を実行する可能性がありますが、この方法で実行されたかのように結果を生成する必要があることに注意してください。

    1. 最初にFROM部分が評価され、どこからデータを取得しますか
    2. 次に、WHERE部分が評​​価され、どの行に関心があるか
    3. 次に、GROUP BY部分が評価され、結果の行をどのように組み合わせるか
    4. 次に、HAVING部分が評価され、どのグループに関心があるかが評価されます
    5. 次に、ORDER BY部分が評価されます。これらの行/グループは、どの順序で実行しますか?
    6. 最後に、SELECT部分​​が評価されます。どの列に関心があるか

    一部のデータベースエンジンでは、SELECT部分​​の2番目の列でグループ化するために「GROUPBY 2」と言うことでこれを回避できますが、上記の順序に固執する場合は、コードが動作しないのは、totalまたはtotal2という名前の列が(まだ)ないことです。

    つまり、2つの表現を繰り返すか、別の方法を見つける必要があります。

    できることは、サブクエリを使用することです(これをサポートするMySQLバージョンを使用している場合):

    SELECT total, total2, total+total2 as grandtotal
    FROM (
        SELECT sum(EXPR) as total, sum(EXPR) as total2
        FROM tablename
        ) x
    

    コメントに従って残りを打ち消します。

    MySQLについてはよくわからないので、サブクエリのエイリアスを作成する必要があるかもしれません:

    ...
    
        FROM tablename
        ) AS x
          ^-+^
            |
            +-- add this
    

    一部のデータベースエンジンでは、サブクエリのエイリアシング時にキーワードASの使用も許可されていないため、上記が機能しない場合は、次のことを試してください。

    ...
    
        FROM tablename
        ) x
          ^
          |
          +-- add this
    



    1. SQL Serverの最新バージョン、エディション、およびSQLServerの履歴

    2. マネージドPostgreSQLクラウドソリューションのベンチマーク-パート4:Microsoft Azure

    3. DjangoORMは列の特定の値に対してORDERBYを実行できますか?

    4. データベース内のすべてのオブジェクトをカウントします