db2 限制SQL中的最大值

bsxbgnwa  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(374)

我完全重写了这个问题,我就是不能破解它
IDB db2 SQL
(from芝加哥犯罪数据集)哪个社区最容易发生犯罪?
当我使用这段代码时,它确实正确地对数据进行了计数和排序

select community_area_number as community_area_number, count(community_area_number) as total_area_crime
from chicago_crime_data
group by community_area_number
order by total_area_crime desc;

问题是,它列出了所有降序的数据,但是无论我使用什么MAX语句,无论是在select还是order by语句中,它都不会只显示最大值。最大值是43,所以我想显示两个都是43的'community_area_numbers'。
而是显示整个列表。
这是

的屏幕截图
此外,是的,我知道我可以只执行LIMIT 2命令,但这将是作弊,因为我手动检查了有2个最大值,但如果此数据更改或我不知道,它不能解决任何问题
先谢了

zbdgwd5y

zbdgwd5y1#

您需要查找的是标准的SQL子句FETCH WITH TIES;

select community_area_number, count(*) as total_area_crime
from chicago_crime_data
group by community_area_number
order by total_area_crime desc
fetch first row with ties;

但是不幸的是,DB2不支持FETCH FIRST中的WITH TIES
经典的方法(即在我们有窗口函数RANKDENSE_RANK之前)是使用子查询:获取最大值,然后获取具有该最大值的所有行。我在这里使用CTE(也称为WITH子句),以便不必将所有内容都写两次。

with counted as
(
  select community_area_number, count(*) as total_area_crime
  from chicago_crime_data
  group by community_area_number
)
select community_area_number, total_area_crime
from counted
where total_area_crime = (select max(total_area_crime) from counted);

(请注意,这只是一个COUNT(*),因为我们要计算每个community_area_number的 * 行 * 数。)

cedebl8k

cedebl8k2#

就像@topsail提到的,你可以使用一个rank函数。
根据上面的表,您可以执行以下操作

SELECT t.* FROM
   (
    SELECT *,
       RANK() OVER (Order by Total_Area_Crime DESC) rnk
    from 
    table1
    )t
WHERE t.rnk = 1

db fiddle
因此,您的完整查询应如下所示:

With cte AS (
    SELECT MAX(COMMUNITY_AREA_NUMBER) AS COMMUNITY_AREA_NUMBER, 
    COUNT(COMMUNITY_AREA_NUMBER) AS TOTAL_AREA_CRIME
    FROM CHICAGO_CRIME_DATA 
    GROUP BY COMMUNITY_AREA_NUMBER
    ORDER BY TOTAL_AREA_CRIME DESC;
)
SELECT t.* FROM
   (
    SELECT *,
       RANK() OVER (Order by Total_Area_Crime DESC) rnk
    from 
    cte
    )t
WHERE t.rnk = 1
6yoyoihd

6yoyoihd3#

原来教授 * 确实 * 希望我们使用限制命令。下面是最终答案:

SELECT COMMUNITY_AREA_NUMBER, COUNT(ID) AS CRIMES_RECORDED 
FROM CHICAGO_CRIME_DATA
GROUP BY COMMUNITY_AREA_NUMBER 
ORDER BY CRIMES_RECORDED DESC LIMIT 1;

感谢所有回复的人:D

相关问题