首页 > 解决方案 > 带有 Group By 子查询的 SQL Max

问题描述

我有一张表,上面有保险福利,以及他们被给予的年限。我想找到每年计数最多的好处。

我在 python 3 中使用 sqlite3。

我的第一个查询是

SELECT COUNT(Benefitname) AS BenCount, BusinessYear
FROM BenefitsCostSharing
GROUP BY Benefitname

这给了我一张包含福利计数和年份的表格。我将第一个查询放入子查询中,尝试使用以下代码按年份查找最多计数:

SELECT MAX(BenCount), BusinessYear 
FROM (
      SELECT COUNT(Benefitname) AS BenCount, BusinessYear
      FROM BenefitsCostSharing
      GROUP BY Benefitname
     )
GROUP BY BusinessYear;

此查询为我提供了每年的以下最大值:

2014-77377

2015-3049

2016-644

我知道 2015 年和 2016 年的最大计数不正确。但我不知道为什么它不起作用。

我的数据来自https://www.kaggle.com/hhs/health-insurance-marketplace

任何帮助,将不胜感激。

标签: pythonsqlsqlite

解决方案


您需要按年份和福利名称分组,然后加入:

SELECT year, name
FROM (SELECT BusinessYear as year, Benefitname as name, COUNT(*),
             ROW_NUMBER() OVER (PARTITION BY BusinessYear ORDER BY COUNT(*) DESC) as rn
      FROM BenefitsCostSharing
      GROUP BY BusinessYear, Benefitname
     ) t
WHERE rn = 1;

推荐阅读