グループごとにランダムで1件
例によって MySQL 限定です。
PostgreSQL でも LIST_AGG
とか使えばいけそう?
team_players
team | player |
---|---|
red | taro |
red | takeshi |
red | maro |
white | daikichi |
white | tsubasa |
white | ninja |
white | takamori |
上の red, white 各チームから、ひとり誰でもいいから出てきてほしい、 という要件で、下のようなクエリを実行する。
SELECT team , SUBSTRING_INDEX(GROUP_CONCAT(player ORDER BY rand() SEPARATOR ","), ",", 1) AS random_selected FROM team_players GROUP BY team;
実行するたびに、red, white から選出される player が変わる。
当然スカラ値しか取れないが、得られた値をキーにして JOIN することはできる。