首页 > 解决方案 > 如何在 SQL 中过滤带有条件的行?

问题描述

我正在尝试使用以下查询从 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。我只是想用以下条件操作数据:

我怎样才能做到这一点?

标签: sqlgroup-byaverageamazon-athenasql-null

解决方案


我认为你想要聚合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


推荐阅读