SQL 根据组选择最常见的列

问题描述 投票:0回答:1

我正在使用 Snowflake 查询数据,其中一个表存在一些我无法控制的问题。

除了一条记录外,大多数记录有多个项目 ID 具有相同的项目描述。例如:

商品编号 物品描述
1234 可口可乐原味
1234 可口可乐原味
1234 可口可乐组织
1234 可口可乐原味

我尝试加入此表以引入项目描述,但由于命名约定不同,结果是两条记录。如何创建查询来为每个唯一的商品 ID 选择最常见的商品描述?

sql join snowflake-cloud-data-platform
1个回答
0
投票

您可以结合使用聚合和窗口函数。首先,计算每个项目 ID 的每个描述的出现次数。然后,使用窗口函数对这些出现次数进行排名。最后,为每个项目 ID 选择计数最高(排名 = 1)的描述:

WITH DescriptionCounts AS (
  SELECT
    ItemID,
    ItemDescription,
    COUNT(*) AS DescriptionCount
  FROM
    YourTable
  GROUP BY
    ItemID,
    ItemDescription
), RankedDescriptions AS (
  SELECT
    ItemID,
    ItemDescription,
    RANK() OVER (PARTITION BY ItemID ORDER BY DescriptionCount DESC) AS DescriptionRank
  FROM
    DescriptionCounts
)
SELECT
  ItemID,
  ItemDescription
FROM
  RankedDescriptions
WHERE
  DescriptionRank = 1;

© www.soinside.com 2019 - 2024. All rights reserved.