0

我正在尝试使用以下查询从 Athena 检索数据:

SELECT DISTINCT cop.shop_id,
         cop.product_id,
         avg(cop.position) AS avg_position,
         cp.kes
FROM data_1 AS cop
JOIN data_2 AS cp
    ON cop.product_id = cp.product_id
WHERE cop.site_id = 1
        AND cop.product_id IS NOT NULL
GROUP BY  cop.shop_id, cop.product_id, cp.kes 

但是,数据中有四列:product_id、shop_id、avg_position、kes。

有些行在列中同时带有 NA 和非 NA kes。我只是想用以下条件操作数据:

  • 如果product_id, shop_id, 和avg_position 相同,并且列中有 NA 和 Non-NA ,则kes 只需保留 Non-NA 行并删除 . 中包含 NA 的行kes
  • 但是,如果 中没有非 NA kes,请不要删除它。

我怎样才能做到这一点?

4

1 回答 1

1

我认为你想要聚合kes

SELECT 
    cop.shop_id,
    cop.product_id,
    AVG(cop.position) AS avg_position,
    MAX(cp.kes) kes
FROM data_1 AS cop
JOIN data_2 AS cp
    ON cop.product_id = cp.product_id
WHERE cop.site_id = 1 AND cop.product_id IS NOT NULL
GROUP BY cop.shop_id, cop.product_id 

聚合函数忽略null值;所以MAX(cp.kes)给你最高的非null价值cp.kes。另一方面,如果 的所有值cp.kesnull在组内,max()则给出null

旁注:并没有意义(尽管这仍然是有效的 SQL)DISTINCT;保证列表中没有重复值。GROUP BYGROUP BYSELECT

于 2020-06-08T22:06:53.213 回答