【发布时间】:2021-06-24 01:26:01
【问题描述】:
我有下表
| Name | Food | Price |
--------------------------
| Alice | Pizza | 5 |
| Alice | Pizza | 10 |
| Alice | Salad | 5 |
| Bob | Soup | 20 |
| Bob | Soup | 15 |
| Carol | Pork | 10 |
--------------------------
我想找到类似的东西
------------------------
| Name | UniqueFoods |
------------------------
| Alice | 2 | # Pizza and Salad
| Bob | 1 | # Has only had soup, despite having it twice
| Carol | 1 |
------------------------
我尝试过各种各样的事情,比如
Person.select(:name, "count(*) AS uniquefoods").distinct.group(:name)
但是,这会产生
------------------------
| Name | UniqueFoods |
------------------------
| Alice | 3 | # incorrect
| Bob | 2 | # incorrect
| Carol | 1 |
------------------------
我想将 .distinct 替换为仅考虑 name 和 food 列且不考虑价格的内容,因此它会在摸索之前删除重复的名称/食物对。
或者,如果有更简单的方法来生成此UniqueFoods 列,那也会有所帮助。
【问题讨论】:
标签: ruby-on-rails activerecord