You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL取行最大值并隐藏重复行 筛选疫苗最高接种计数记录

Oracle SQL 按疫苗ID筛选最高接种人次记录实现方案

直接使用 Oracle 内置的窗口排序函数即可实现需求,逻辑为:对相同idvaccine的所有记录按接种人次倒序排序,仅保留排序为第一位的记录即可。

实现代码(推荐写法)

WITH vacc_inoc_stats AS (
    -- 第一步:先统计各地点各疫苗的接种人次
    SELECT 
        vaccines.placename, 
        vaccinetype.idvaccine,
        COUNT(*) AS inoc_total
    FROM vaccines, request, vaccinetype
    WHERE request.idvaccine = vaccines.idvaccine
      AND vaccinetype.idvaccine = request.idvaccine
    GROUP BY vaccines.placename, vaccinetype.idvaccine
),
vacc_rank AS (
    -- 第二步:按疫苗ID分组,组内按接种人次倒序排序打排名标签
    SELECT 
        placename,
        idvaccine,
        inoc_total,
        -- 同疫苗下接种人次越高排名越靠前
        ROW_NUMBER() OVER(PARTITION BY idvaccine ORDER BY inoc_total DESC) AS rank_num
        -- 若需保留同疫苗下所有接种人次并列最高的记录,把上方ROW_NUMBER()替换为RANK()即可
    FROM vacc_inoc_stats
)
-- 第三步:仅取每个疫苗排名第一的记录
SELECT placename, idvaccine, inoc_total
FROM vacc_rank
WHERE rank_num = 1
ORDER BY placename, idvaccine;

简化写法(单层级子查询)

如果不需要拆分统计和排序逻辑,也可以直接嵌套一层查询实现:

SELECT placename, idvaccine, inoc_total
FROM (
    SELECT 
        vaccines.placename, 
        vaccinetype.idvaccine,
        COUNT(*) AS inoc_total,
        ROW_NUMBER() OVER(PARTITION BY vaccinetype.idvaccine ORDER BY COUNT(*) DESC) AS rank_num
    FROM vaccines, request, vaccinetype
    WHERE request.idvaccine = vaccines.idvaccine
      AND vaccinetype.idvaccine = request.idvaccine
    GROUP BY vaccines.placename, vaccinetype.idvaccine
) t
WHERE rank_num = 1
ORDER BY placename, idvaccine;

补充说明

如需在多个地点接种人次并列最高时按固定规则选唯一记录,可以在窗口函数的ORDER BY后追加排序条件,比如ORDER BY inoc_total DESC, placename ASC就会在人次相同时优先取地点名称排序靠前的记录。


内容的提问来源于stack exchange,提问作者jawionfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:05