让表格roasts
包含三列country
,country2
,country3
。这些列用于指示混合咖啡来自哪些国家/地区。因此,国家名称可以出现在三列中的任何一列中。虽然我可以对任何给定的列进行计数,但我想计算一个值出现在所有三个国家列中的次数。
我想在Rails / ActiveRecord中执行此操作。我已经达到了下面的SQL,但是这个输出是对的:
SELECT country, country2, country3, COUNT(*) AS CountryCount FROM roasts GROUP BY country, country2, country3;
我怀疑这是我的分组方式。
答案 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;
如果你有一张大桌子,我会推荐横向连接。此版本扫描表格三次(每个国家一次)。