しるてく

技術的な話をします

group byしてcountした結果でgroup byしたいとき

たとえばガチャとかで、10種類のアイテムがあって、一番コンプしている人は誰だろう、みたいなことを調べる時は、

SELECT user_id, count(*) AS item_count FROM user_gacha GROUP BY user_id ORDER BY item_count LIMIT 1;

とかしてあげればいいのですが、何人ぐらいが何個所持しているのかなーみたいことを調べるには、count(*)でgroup byしてあげないといけないのかなーとおもって色々試したら、

SELECT ug.item_count AS item_count, count(*) AS user_count
  FROM ( SELECT user_id, count(*) AS item_count from user_gacha GROUP BY user_id ) as ug
  GROUP BY ug.item_count ORDER  BY item_count;

でできるらしい。