出个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