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

MySQL:GROUPBYに含まれていません

    次の方法で完全なグループを作成する必要があります:

    SELECT `name`, `type`, `language`, `code` 
    FROM `users` 
    WHERE `verified` = '1' 
    GROUP BY `name`, `type`, `language`, `code` 
    ORDER BY `count` DESC LIMIT 0, 25
    

    SQL92では、select句のすべての列(集計を除く)がgroupby句の一部である必要があります。 SQL99はこの制限を少し緩和し、select句のすべての列がgroupby句に機能的に依存している必要があると述べています。 MySQLはデフォルトで部分的なgroupbyを許可しており、これにより非決定論的な回答が生成される場合があります。例:

    create table t (x int, y int);
    insert into t (x,y) values (1,1),(1,2),(1,3);
    select x,y from t group by x;
    +------+------+
    | x    | y    |
    +------+------+
    |    1 |    1 |
    +------+------+
    

    つまりグループxにはランダムなyが選択されます。 @@ sql_modeを設定することで、この動作を防ぐことができます:

    set @@sql_mode='ONLY_FULL_GROUP_BY';
    select x,y from t group by x; 
    ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY
    


    1. SQL Serverで信頼できないすべてのCHECK制約を返す方法(T-SQLの例)

    2. MySQLの日付形式のチートシート

    3. クロス集計クエリをAccessで通常のクエリに戻す方法

    4. データベース設計者になる方法