当前位置: 首页 > 面试题库 >

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

东方俊材
2023-03-14
问题内容

我有一个具有以下结构的行表,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`](http://www.postgresql.org/docs/current/interactive/sql-select.html)

在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演示所有内容。



 类似资料:
  • 问题内容: 我需要在数组中找到最常见的(模态)元素。 我能想到的最简单的方法是为每个唯一元素设置变量,并为每个元素分配一个计数变量,每次将其记录在遍历数组的for循环中时,该变量都会增加。 不幸的是,数组的大小是未知的,并且会很大,所以这种方法是没有用的。 我在Objective- C中遇到了类似的问题,该问题使用NSCountedSet方法对数组元素进行排名。不幸的是,我对编程非常陌生,只能将第

  • 假设有几个数组: 我需要找出所有可能的元素集合(1,2,3,4,5...)中的每一个在至少两个阵列(A,B,C....)并以下列方式显示它们: 实际输入是包含字符串的文件。可能有数千个文件,每个文件可能包含一百多个密钥字符串。 我尝试了下面的方法:首先,我通过比较所有可能的数组对来生成元素集。然后,我试图通过使用逻辑生成其他集合——元素集合的交集在数组集合的并集中很常见。像这样: 从上面我们可以得

  • 问题内容: 在Python列表中查找最常见元素的有效方法是什么? 我的列表项可能无法散列,因此无法使用字典。同样在绘制的情况下,应返回索引最低的项目。例: 问题答案: 提出了这么多解决方案,令我惊讶的是没有人提出我认为显而易见的解决方案(对于不可哈希但可比较的元素)-。 提供快速,可重用的功能,并允许你将一些棘手的逻辑委托给经过良好测试的标准库组件。考虑例如: 当然,这可以写得更简洁一些,但我的目

  • 本文向大家介绍在Python的2D列表中查找最常见的元素,包括了在Python的2D列表中查找最常见的元素的使用技巧和注意事项,需要的朋友参考一下 2D列表具有列表作为其元素。换句话说,它是一个列表列表。在本文中,我们需要找到列表中所有列表中最常见的元素。 随着最大和计数 我们设计一个条件为in的跟随项,以检查给定子列表中元素的存在。然后,我们将max函数与count函数一起使用以获取具有最大频率

  • 问题内容: 我将如何查找数组中三个最常见的元素?我正在使用长度为10,000的数组,元素为0-100之间的随机整数。 我正在考虑使用两个数组,其中一个长度为100,并且仅通过使用if语句来递增。但是,我想知道是否有一种方法只能使用一个for / if loop(statement)来查找这些值。 问题答案: 如果要通过列表中的固定次数进行此操作,则需要第二个数据结构。 如果该集合中的值有上限和下限