oracle sql 求众数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle sql 求众数相关的知识,希望对你有一定的参考价值。

月份 ID 天数
1月 A1 3
1月 A2 3
1月 A3 3
1月 A4 4
1月 A5 2
1月 A6 3
1月 A7 3
从上表取出月份里出现次数最多的天数
要求得到结论为:

月份 天数
1月 3
因3在1月里出现次数最多
补充
月份 ID 天数
1月 A1 3
1月 A2 3
1月 A3 3
1月 A4 4
1月 A5 2
1月 A6 3
1月 A7 3

2月 A1 4
2月 A2 4
2月 A3 4
2月 A4 4
2月 A5 2
2月 A6 3
2月 A7 3
得到出现最多的天数:
月份 天数
1月 3
2月 4

参考技术A 假设三个列名为 mon id days

SQL> select mon,days from t1;
MON DAYS
---------- ----------
1 3
1 3
1 3
1 4
1 2
1 3
1 3
2 4
2 4
2 4
2 4
MON DAYS
---------- ----------
2 2
2 3
2 3

SQL> select mon,days from (
2 select mon,days,row_number()over(partition by mon order by mon,cnt desc) rn from (
3 select mon,days,count(*) cnt from t1 group by mon,days)) where rn = 1;
MON DAYS
---------- ----------
1 3
2 4本回答被提问者和网友采纳
参考技术B select 月份,天数 from table_name where count(天数)=(select max(count(天数)) from table_name);

参考技术C SELECT 月份,天数
FROM t1 as a
GROUP BY 月份,天数
HAVING COUNT(*) =
(SELECT TOP 1COUNT(*)
FROM t1
WHERE 月份 = a.月份
GROUP BY 月份,天数
ORDER BY COUNT(*) DESC
)
参考技术D SELECT MONTH, DAY
FROM (SELECT MONTH, DAY, COUNT(1) CNT
FROM TAB
GROUP BY MONTH, DAY
ORDER BY CNT DESC)
WHERE ROWNUM = 1

leetcode-169求众数

求众数

思路:

  记录每个元素出现的次数,然后查找到众数

代码:

  

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        threshold = len(nums) // 2
        d = {}
        for i in nums:
            d[i] = d.get(i, 0) + 1
        for k, v in d.items():
            if v > threshold:
                return k

大神思路:

  对数组排序。因为众数的次数大于数组尺寸的1/2,所以众数肯定位于已排序的中间

代码:

  

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[len(nums)//2]

 

以上是关于oracle sql 求众数的主要内容,如果未能解决你的问题,请参考以下文章

求众数

leetcode-169求众数

求众数

求众数

169. 求众数

怎样求众数和中位数