MySQLで複雑なGROUP BYを実行するにはどうすればよいですか?
他のテーブルへのいくつかのキーを含むテーブルがあります(各キーは複数の列で構成されています)。等しいキーを持つ行をグループ化したいのですが、それらすべてをグループ化したくありません。それは単純なGROUP BYキーではなく、たとえば10のグループを作成できるようにしたいのです。したがって、特定のキーが50回表示された場合、このグループ化(5グループの10)を実行すると5つの結果が得られます。また、このグループ化をキー内でランダムに発生させます。 私はこれを行う直接的な方法を知りませんでした、そして私が思いついたラウンドアバウト方式は私が思っているように機能していません。私が思いついたラウンドアバウト交差点の解決策は、値がそのキーiのith出現を(ただしランダムな順序で)表すような整数である各キーの新しい列を作成することでした。次に、整数の除算を行って、キー内のすべてのn(たとえば10)行が同じ値になるようにし、GROUP BYその値に対してa を行うことができます。 今説明したことを達成するためのより直接的な方法はありますか?これはかなり厄介で、新しいインデックス列を作成するときに問題が発生しました(この質問で説明したように)。 編集:まず、これはMySQL用であることに注意してください。目標が明確でない場合に備えて、例を追加します。MySQLのドキュメントはほとんどそこに到達する方法を示しています: CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; これは、私が望むものではありませんが、近くなるテーブルを作成します: +--------+----+---------+ | grp | id …