自学内容网 自学内容网

SQL用一个字段查询出数据的交集

出个SQL查询的题吧,有兴趣的可以看看

1、问题

下面有一份数据(图1),由两部分组成:分析数据和基准数据
分析数据标识列为1,基准数据标识列为1,两字段0,1互斥
要求:按找出两部分数据中都存在的storeId数据(按storeId求交集),用一个查询字段flag标记出来,
符合条件的数据标记为1,否则标记为0
结果如图2,参考答案见末尾

图1

在这里插入图片描述

图2

在这里插入图片描述

2、附DDL和DML insert语句,MySQL可执行

CREATE TABLE `practice_data` (
`year_month` varchar(10),
`analyze_flag` tinyint,
`baseline_flag` tinyint,
`store_id` int
);

INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2024-11', 1, 0, 1);
INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2024-10', 1, 0, 1);
INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2024-9', 1, 0, 2);
INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2023-12', 0, 1, 1);
INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2023-11', 0, 1, 4);
INSERT INTO `practice_data` (`year_month`, `analyze_flag`, `baseline_flag`, `store_id`) VALUES ('2023-10', 0, 1, 5);

3、答案参考

select `year_month`, analyze_flag,baseline_flag, store_id,
case when 
sum(analyze_flag + baseline_flag) over (partition by store_id) > sum(analyze_flag) over (partition by store_id)
and 
sum(analyze_flag) over (partition by store_id)   > 0
then 1 else 0 
end as flag
from practice_data

原文地址:https://blog.csdn.net/haohaifeng002/article/details/143490041

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!