【发布时间】:2018-02-01 13:02:14
【问题描述】:
有一个表roasts,它包含三列country、country2、country3。这些列用于指示混合咖啡来自哪些国家。因此,国家名称可以出现在三列中的任何一列中。虽然我可以对任何给定列进行计数,但我想计算一个值在所有三个国家/地区列中出现的次数。
我想在 Rails/ActiveRecord 中执行此操作。我已经知道了下面的 SQL,但是这个输出不正确:
SELECT country, country2, country3, COUNT(*) AS CountryCount FROM roasts GROUP BY country, country2, country3;
我怀疑这就是我的分组方式。
【问题讨论】:
-
这是一个现有的数据库还是您正在进行设计。看起来不太好:)。重复的列(例如 country、country2、country3)应该在一个单独的表中(roast_id 和 country)。此外,国家也应该在另一个表中(由他们的 country_id 引用),而不仅仅是国家名称。这将允许更灵活的解决方案(3 个国家是绝对最大值吗?),国家名称中的错误更少,查询更容易(从烤肉、国家烤肉、烤肉 ID = 烤肉.id 的国家中选择国家名称、计数(*)和country_id = countries.id 按国家/地区名称分组)
-
@Pablo。这是一个现有的数据库,我正在增加它的复杂性。它实际上比我在这里描述的更糟糕,因为每个国家也会有许多地区,实际上,每种咖啡都有相关的属性,例如
altitude、process和variety但是我不知道是什么这些值是,并留给用户创建这些。
标签: sql ruby-on-rails postgresql