我有一个表,它有一个数字列和一个属性列,如下所示:
1.
+-----+-----+
| num | att |
-------------
| 1 | a |
| 1 | b |
| 1 | a |
| 2 | a |
| 2 | b |
| 2 | b |
+------------
我想使数字唯一,属性是该数字最常出现的属性,如下所示(这是我感兴趣的最终产品):
2.
+-----+-----+
| num | att |
-------------
| 1 | a |
| 2 | b |
+------------
我已经为此工作了一段时间,并设法为自己编写了一个查询,用于查找给定数字的属性出现的次数,如下所示:
3.
+-----+-----+-----+
| num | att |count|
------------------+
| 1 | a | 1 |
| 1 | b | 2 |
| 2 | a | 1 |
| 2 | b | 2 |
+-----------------+
但是我想不出一种方法来只从上面的表中选择那些计数最高的行(当然是针对每个数字)。
所以基本上我要问的是表3,我如何只为每个数字选择计数最高的行(当然,一个描述直接从表1到表2的方法的答案也可以作为一个答案:)
3条答案
按热度按时间1bqhqjot1#
可以使用聚合和窗口函数:
对于每个
num
,这带来了最频繁的att
; 如果有领带,越小越好att
保留。gpnt7bae2#
oracle有一个聚合函数来实现这一点,
stats_mode()
.:在统计中,最常见的值称为mode——因此函数的名称。
这是一把小提琴。
cnwbcb6i3#
您可以使用group by和count,如下所示