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

mySQLとpostgreSQLのgroupby句、なぜpostgreSQLでエラーが発生するのですか?

    集計関数 を使用する必要があります :

    集計関数は、一連の入力値から単一の結果を計算します。

    SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
    FROM the_table 
    GROUP BY col2;
    

    db<>フィドルデモ

    MySQLによるGROUPBYの処理>

    標準SQLでは、GROUP BY句を含むクエリは、GROUPBY句で指定されていない選択リスト内の非集計列を参照できません

    および:

    MySQLはGROUPBYの使用を拡張して、選択リストがGROUPBY句で指定されていない非集計列を参照できるようにします。これは、前述のクエリがMySQLで有効であることを意味します。この機能を使用すると、不要な列の並べ替えやグループ化を回避して、パフォーマンスを向上させることができます。ただし、これは主に、GROUPBYで指定されていない各非集計列のすべての値が各グループで同じである場合に役立ちます。 サーバーは各グループから任意の値を自由に選択できるため、同じでない限り、選択される値は不確定です

    したがって、明示的な集計関数のないMySQLバージョンでは、不確定な値になる可能性があります。特定の集計関数を使用することを強くお勧めします。

    編集:

    MySQLによるGROUPBYの処理 から :

    SQL92以前では、selectリスト、HAVING条件、またはORDER BYリストが、GROUPBY句で指定されていない非集計列を参照しているクエリは許可されていません。

    SQL99以降では、オプション機能T301ごとにそのような非集計が許可されます GROUP BY列に機能的に依存している場合: nameとcustidの間にそのような関係が存在する場合、クエリは有効です。これは、たとえば、顧客の主キーである場合です。

    例:

    SELECT o.custid, c.name, MAX(o.payment)
    FROM orders AS o
    JOIN customers AS c
      ON o.custid = c.custid
    GROUP BY o.custid;
    


    1. SQLデータベースを簡単に復元–ステップバイステップガイド

    2. 有用なOracleAppsプリンタークエリのトップ9

    3. MySQL:結合の種類の簡単な内訳

    4. コミットと選択の間のOracleの遅れ