sql - 如何在 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
。我只是想用以下条件操作数据:
- 如果
product_id
,shop_id
, 和avg_position
相同,并且列中有 NA 和 Non-NA ,则kes
只需保留 Non-NA 行并删除 . 中包含 NA 的行kes
。 - 但是,如果 中没有非 NA
kes
,请不要删除它。
我怎样才能做到这一点?
解决方案
我认为你想要聚合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.kes
都null
在组内,max()
则给出null
。
旁注:并没有意义(尽管这仍然是有效的 SQL)DISTINCT
;保证列表中没有重复值。GROUP BY
GROUP BY
SELECT
推荐阅读
- reactjs - Writing tests with react and context api
- regex - kotlin 中的积极后视在比赛中不起作用
- java - 我们可以在 for 循环的开头独立使用分号吗?
- r - 如何使用 fsolve 函数在 R 中找到多个非线性方程的解
- spring - 如何将 Thymeleaf 前端与 Spring Boot 项目分离
- xaml - 如何在 DirectX UWP 应用中呈现 XAML 页面
- wordpress - 如何从 Wordpress 搜索结果中排除特定页面
- android - 我的 JobService 在 Android 10 中无法运行,但在 Android 9 及更低版本中运行良好
- reactjs - 如何在 Reactjs 中创建多步表单
- java - 为 Spring Cloud 配置 maven 依赖项