entでgroup byで集約した結果のcountでorder byする方法
タイトルどおり。
select count(*) as cnt from items group by type order by cnt desc
みたいにgroup byして指定した項目毎に件数で並び替えたい、というケースがある場合、entではどうやったら記述できるのか調べた。
本当にこれが正解なのかはわからなかったけど、一応上のようなクエリをentで発行することはできた。
var results []struct { Count int Type string } err = r.ent().Item.Query().Where(apply).Order( func(s *sql.Selector) { s.OrderExpr(sql.ExprP("Count(*) Desc")) }, ).GroupBy(item.FieldType).Aggregate(ent.Count()).Scan(ctx, &results)
でも、もっといいやり方がありそうで、少しモヤル。
追記: 特に試してはいないけど、entでコード生成した時にすでに上記のようなものが生成されている模様。 だから、自前で上記のようなコードは記述する必要はなさそう。