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

标签 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

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

最佳答案

您应该有一个名为 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;

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

关于sql - 在三个单独的列中计算值 - Rails/SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563415/

相关文章:

java - android/rails 分段上传问题

python - CREATE EXTENSION postgis 后类型几何不存在

postgresql - PL/pgQSL - 在存储过程中枚举 ROWTYPE

mysql - 它没有在查询中显示任何结果

mysql - 在 MySQL 模式中, "AUTO_INCREMENT=3"的含义是什么

javascript - 是否有用于 Javascript 和 Rails 的库来使用 key 加密和解密?

php - 如何连接到 heroku postgres 数据库?

php - "my network"带有sql子查询的函数

sql - 如何识别SQL Server的端口号

javascript - Select2 返回 TypeError : data is undefined