【问题标题】:查找一行中的最大值并隐藏不同行中的重复值Oracle SQL [重复]
【发布时间】:2021-12-18 07:16:50
【问题描述】:

运行此查询将创建一个包含 3 列的表(地名、疫苗 ID 以及向不同人应用了多少疫苗的计数)。

select vaccines.placename, vaccinetype.idvaccine,count(*)
from  vaccines,request,vaccinetype
where request.idvaccine = vaccines.idvaccine
and vaccinetype.idvaccine = request.idvaccine
group by vaccines.placename,vaccinetype.idvaccine
order by vaccines.placename, vaccinetype.idvaccine

在上面的查询结果图像中,您会看到在不同的地方应用了相同的疫苗 id,但这是我想要过滤的东西,我只想显示那些疫苗 id 最常应用于人。例如,在此表中,我们必须消除第 6 行,因为第 1 行已经存在具有相同的疫苗代码,而且列计数 (*) 中的值高于第 6 行。

我已尝试进行子查询,但过滤不正确。

【问题讨论】:

  • 您想消除第 6 行,因为第 1 行对于相同的 IDVACCINE 具有更高的 COUNT,但是第 4 行呢?你不应该也消除那个吗?如果不是,则不清楚您通过不同地处理第 4 行和第 6 行来达到什么目的。
  • 是的,你是对的@MarcoBonelli,我没有写完这个例子。也应该删除第 7 行和第 4 行
  • 将您的查询包装在子查询中,然后使用任何链接的重复项。

标签: sql oracle debugging greatest-n-per-group


【解决方案1】:

这里有一个选项:按vaccineid 对行进行排名,按count 结果排序,然后获取排名为“最高”的行。在代码中读取 cmets。

WITH
   your_query
   AS
   -- this is your query, slightly rewritten so that it uses
   -- * JOINs, so that you actually join tables there and leave WHERE clause for
   --   conditions (if any; there are none in your query)
   -- * table aliases, which make it easier to read
   -- * column alias applied to COUNT function
      (  SELECT v.placename, t.idvaccine, COUNT (*) cnt
           FROM vaccines v
                JOIN request r ON r.idvaccine = v.idvaccine
                JOIN vaccinetype t ON t.idvaccine = r.idvaccine
       GROUP BY v.placename, t.idvaccine),
   temp
   AS
   -- it fetches values from your query, with addition of the RANK analytic function
   -- which ranks rows per each IDVACCINE, sorted by COUNT result in descending order
      (SELECT placename,
              idvaccine,
              cnt,
              RANK () OVER (PARTITION BY idvaccine ORDER BY cnt DESC) rnk
         FROM your_query)
-- finally, retrieve rows that rank as "highest" in TEMP CTE         
  SELECT placename, idvaccine, cnt
    FROM temp
   WHERE rnk = 1
ORDER BY placename, idvaccine;

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 2017-06-08
    • 2018-06-29
    • 2015-06-23
    • 2021-12-02
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多