GROUPBY—如何在sql中筛选具有条件的行?

bnl4lu3b  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(301)

我试图通过以下查询从雅典娜检索数据:

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

但是,数据中有四列:产品id、商店id、平均位置、kes。
有些行中同时包含na和非na kes 列。我只想用以下条件操作数据:
如果 product_id , shop_id ,和 avg_position 是一样的,如果有na和非na在 kes 列中,只需保留非na行,并删除包含na的行 kes .
但是,如果 kes ,不要删除它。
我该怎么做?

py49o6xq

py49o6xq1#

我想你想继续 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 .
旁注: DISTINCT 以及 GROUP BY 在一起没有意义(尽管这仍然是有效的sql); GROUP BY 保证在 SELECT 列表已存在。

相关问题