计算三个单独列中的值 - Rails / SQL

时间:2018-02-01 13:02:14

标签: sql ruby-on-rails postgresql

让表格roasts包含三列countrycountry2country3。这些列用于指示混合咖啡来自哪些国家/地区。因此,国家名称可以出现在三列中的任何一列中。虽然我可以对任何给定的列进行计数,但我想计算一个值出现在所有三个国家列中的次数。

我想在Rails / ActiveRecord中执行此操作。我已经达到了下面的SQL,但是这个输出是对的:

SELECT country, country2, country3, COUNT(*) AS CountryCount FROM roasts GROUP BY country, country2, country3;

enter image description here

我怀疑这是我的分组方式。

1 个答案:

答案 0 :(得分:1)

你应该有一个名为CoffeeCountries的表格,每个国家/地区对每个混合都有一行。我强烈建议您更改数据结构。

使用您的数据结构,您需要取消数据的显示。因为您的数据很小并且您可能不熟悉横向连接,所以我将使用union all方法:

select country, count(*)
from ((select country1 as country from roasts) union all
      (select country2 as country from roasts) union all
      (select country3 as country from roasts)
     ) c
where country is not null
group by country
order by count(*) desc;

如果你有一张大桌子,我会推荐横向连接。此版本扫描表格三次(每个国家一次)。