sql - 计算每列中字符串的出现次数(Postgres)
问题描述
所以我有一个像这样结构简单的数据库
CAT | DOG | FISH
+-------+-------+--------+
| red | blue | orange |
+-------+-------+--------+
| green | black | white |
+-------+-------+--------+
| red | black | orange |
+-------+-------+--------+
我希望能够获得一个表格或对象或其他东西,它告诉我每列中每个字符串的频率。所以当我运行查询时,我想看到类似
{cat: {"red": 2, "green": 1}, dog: {"blue": 1, "black": 2} , fish: {"orange": 2, "white": 1}}
我只需要快速查询。还将有 10 列而不是 3 列。
我四处搜索,但我发现的唯一方法是每列计算一个计数,所以就像
SELECT cat, count(cat) FROM my_table GROUP BY cat
但是,如果我想要通过对每列执行 1 个查询而不是 1 个查询来获得每列的频率怎么办。
谢谢!
解决方案
一种方法使用分组集:
select cat, dog, fish, count(*)
from t
group by grouping sets ( (cat), (dog), (fish) );
如果您的列类型兼容,您还可以使用横向连接:
select v.colname, v.val, count(*)
from t cross join
(values ('cat', cat), ('dog', dog), ('fish', fish)
) v(colname, val)
group by v.colname, val;
推荐阅读
- php - Twitter OAuth 响应 403 http_code
- unity3d - 如何统一修改计算着色器中的纹理像素?
- sql - 使用 distinct 子句时查询返回空列表
- java - 在java中将svg转换为某种图像格式
- javascript - 如何在 Axios 中传递参数?
- python - 在 AppNexus API 中使用
- go - 如果我不需要错误处理,如何使用多值返回函数的结果作为 Golang 中另一个函数的参数?
- c++ - 类模板的 constexpr 运算符重载
- osgi - 从 Spring DM 1.2 Spring 3 / KARAF 4.0.10 迁移到 Blueprint、Spring 5 和 KARAF 4.2.0
- r - 如何在R中的数据框中组合两列?