我正在尝试在 SQLite DB 中构建一个支持条件分组的查询。
这是我到目前为止所尝试的:
SELECT
case
when A>1 AND B>1 THEN 1
when X>1 AND Y>1 THEN 2
when C>1 AND D>1 THEN 3
END AS data_grp,
SUM(col1) AS col1,
SUM(col2) AS col2
FROM tbl
GROUP BY data_grp;
如果一次只有一个案例是真的,这工作得很好。如果多个案例连续为真,则返回第一个案例而不是所有满意的组。
我已经尝试过union
,效果很好但速度很慢。有没有其他方法可以使用这个条件组快速获取结果。
样本数据和预期结果:
DROP TABLE IF EXISTS tbl;
CREATE TABLE tbl
(
A INT,
B INT,
C INT,
D INT,
X INT,
Y INT,
col1 int,
col2 int
);
INSERT INTO tbl(A,B,C,D,X,Y,col1,col2) values (2,3,0,0,0,0,5,10);
INSERT INTO tbl(A,B,C,D,X,Y,col1,col2) values (0,0,0,0,8,10,3,2);
INSERT INTO tbl(A,B,C,D,X,Y,col1,col2) values (5,4,4,9,0,0,3,2);
SELECT
case
when A>1 AND B>1 THEN 1
when X>1 AND Y>1 THEN 2
when C>1 AND D>1 THEN 3
END AS data_grp,
SUM(col1) AS col1,
SUM(col2) AS col2
FROM tbl
GROUP BY data_grp;
查询输出:
"1" "8" "12"
"2" "3" "2"
预期输出:
"1" "8" "12"
"2" "3" "2"
"3" "3" "2"