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

MySQLGroupByおよびOrde​​rBy

    簡単な解決策は、ORDERステートメント first を使用して、クエリを副選択にラップすることです。 GROUPBY後でを適用します :

    SELECT * FROM ( 
        SELECT `timestamp`, `fromEmail`, `subject`
        FROM `incomingEmails` 
        ORDER BY `timestamp` DESC
    ) AS tmp_table GROUP BY LOWER(`fromEmail`)
    

    これは結合の使用に似ていますが、見た目がはるかに良くなります。

    GROUPBY句を指定したSELECTで非集計列を使用することは非標準です。 MySQLは通常、最初に見つけた行の値を返し、残りを破棄します。 ORDER BY句は、返された列の値にのみ適用され、破棄された列の値には適用されません。

    重要な更新 実際に機能するために使用される非集計列の選択は、信頼されるべきではありません。 MySQLドキュメント による 「これは主に、GROUPBYで指定されていない各非集計列のすべての値が各グループで同じである場合に役立ちます。サーバーは任意の値を自由に選択できます 各グループからのものであるため、同じでない限り、選択される値は不確定です 。"

    5.7.5 現在 ONLY_FULL_GROUP_BYはデフォルトで有効になっているため、非集計列はクエリエラーを引き起こします(ER_WRONG_FIELD_WITH_GROUP)

    @mikepが以下で指摘しているように、解決策は ANY_VALUE() 5.7以降

    http://www.cafewebmaster.com/mysql-order-sort-group<を参照してください。 / a> https://dev.mysql.com/doc /refman/5.6/en/group-by-handling.html https://dev.mysql.com/doc /refman/5.7/en/group-by-handling.html https://dev.mysql.com /doc/refman/5.7/en/miscellaneous-functions.html#function_any-value



    1. MySQLチュートリアル:MySQL INステートメント(上級)

    2. SQL Serverの「rowversion」とは何ですか?

    3. ORA 00904エラー:識別子が無効です

    4. MySQL match()against()-関連性と列で並べ替えますか?