繁体   English   中英

SQL:提取与其他列中每个唯一实体的列最大值有关的行段

[英]SQL: Extracting row segment pertaining to maximum value of a column for each unique entity in some other column

我有“输入表”,如附加快照所示。 使用 SQL,我打算构建一个“输出表”,其中:“MaxDays”:应该显示给定“ID”的“天”的最大值
“Type_MaxDays”:是“Type”的对应值,与为“MaxDays”标识的最大“Days”有关“TotalUniqueType”:计算任何给定 ID 的所有唯一“Type”

例如ID=878,Days=90是(63,90,33,48)的最大值,对应Type=A。 因此,在 output 表中,Max_Days=90 和 Type_MaxDays=A。由于 ID=878 总共有 4 个唯一的“类型”(即 A、B、C、D)所以 TotalUniqueType=4。

找到“TotalUniqueType”似乎很简单,但是来自 python/pandas 背景,我无法弄清楚如何使用 SQL 检索“MaxDays”和“Type_MaxDays”。 请指教。

在此处输入图像描述

一种选择是加入一个子查询,该查询为每个ID查找最大天数以及不同类型计数。 然后,还有 select 具有最大天数的行的类型。

SELECT
    t1.ID,
    t1.Days AS MaxDays,
    t1.Type AS Type_MaxDays,
    t2.TypeCnt AS TotalUniqueType
FROM yourTable t1
INNER JOIN
(
    SELECT ID, MAX(Days) AS MaxDays, COUNT(DISTINCT Type) AS TypeCnt
    FROM yourTable
    GROUP BY ID
) t2
    ON t1.ID = t2.ID AND t1.Days = t2.MaxDays;

下面演示链接的屏幕截图

演示

我会推荐 window 函数和聚合:

select id,
       max(days) as maxdays,
       max(case when seqnum = 1 then type end) as type_at_maxdays,
       count(distinct type)
from (select t.*,
             row_number() over (partition by id order by days desc) as seqnum
      from t
     ) t
group by id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM