ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

グループごとにランダムで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;

f:id:ardggy:20181002231627g:plain

実行するたびに、red, white から選出される player が変わる。

当然スカラ値しか取れないが、得られた値をキーにして JOIN することはできる。