用group by查找数组中最常见的元素

麦克勒

我有一个具有以下结构的行表,name TEXT, favorite_colors TEXT[], group_name INTEGER其中每一行都有每个人喜欢的颜色以及该人所属组的列表。如何GROUP BY group_name获得每个组中最常见的颜色的列表?

您可以组合int[] && int[]设置重叠,int[] & int[]获取交点然后进行其他计数和排名吗?

欧文·布兰德斯特

快速而肮脏:

SELECT group_name, color, count(*) AS ct
FROM (
   SELECT group_name, unnest(favorite_colors) AS color
   FROM   tbl
   ) sub
GROUP  BY 1,2
ORDER  BY 1,3 DESC;

一个更好 LATERAL JOIN

在Postgres 9.3或更高版本中,这是更简洁的形式:

SELECT group_name, color, count(*) AS ct
FROM   tbl t, unnest(t.favorite_colors) AS color
GROUP  BY 1,2
ORDER  BY 1,3 DESC;

以上是的简写

...
FROM tbl t
JOIN LATERAL unnest(t.favorite_colors) AS color ON TRUE
...

与其他任何查询一样INNER JOIN,它会排除没有颜色(favorite_colors IS NULL)的-与第一个查询一样。

在结果中包括此类行,请改用:

SELECT group_name, color, count(*) AS ct
FROM   tbl t
LEFT   JOIN LATERAL unnest(t.favorite_colors) AS color ON TRUE
GROUP  BY 1,2
ORDER  BY 1,3 DESC;

您可以在下一步中轻松汇总每个组的“最常用颜色”,但是您需要首先定义“最常用颜色” ...

最常见的颜色

根据评论,选择> 3次出现的颜色。

SELECT t.group_name, color, count(*) AS ct
FROM   tbl t, unnest(t.favorite_colors) AS color
GROUP  BY 1,2
HAVING count(*) > 3
ORDER  BY 1,3 DESC;

汇总数组中的顶部颜色(降序排列):

SELECT group_name, array_agg(color) AS top_colors
FROM  (
   SELECT group_name, color
   FROM   tbl t, unnest(t.favorite_colors) AS color
   GROUP  BY 1,2
   HAVING count(*) > 3
   ORDER  BY 1, count(*) DESC
   ) sub
GROUP BY 1;

-> SQLfiddle演示所有内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

tableView中最常见的数组元素

来自分类Dev

确定int数组中最常见的元素

来自分类Dev

使用Pyspark获取数组中最常见的元素

来自分类Dev

最常见的数组元素

来自分类Dev

PHP:数组中最常见的值

来自分类Dev

词典数组中最常见的字典

来自分类Dev

查找几个数组中元素的最常见组合

来自分类Dev

在几个数组中查找元素的最常见组合

来自分类Dev

通过一个循环查找JS数组中最常见的项目

来自分类Dev

JavaScript函数中的速度差异会找到数组中最常见的元素

来自分类Dev

二维数组中最常见的元素。如何优化?

来自分类Dev

计算最常见的数组元素

来自分类Dev

创建JavaScript数组中最常见值的索引数组

来自分类Dev

查找字符串中最常见的单词

来自分类Dev

查找集合中最常见的数字组合

来自分类Dev

在Python 3中查找网站中最常见的单词

来自分类Dev

在Python 3中查找网站中最常见的单词

来自分类Dev

查找 Pandas 数据框中最常见的事件

来自分类Dev

Java-获取列表中最常见的元素

来自分类Dev

PostgreSQL获得数组中最常见的值

来自分类Dev

获取数组中最常见的值,或显示混合结果

来自分类Dev

PostgreSQL-在数组中查找最常见的substring()

来自分类Dev

获取mysql中最常见的值

来自分类Dev

Java中最常见的价值

来自分类Dev

txt文件中最常见的单词

来自分类Dev

平面清单中最常见的价值

来自分类Dev

子列表中最常见的值

来自分类Dev

Python 列表中最常见的值

来自分类Dev

改进Java 8查找“战争与和平”中最常见单词的方式