Я пытаюсь создать запрос, который поддерживает условную группу, в БД SQLite.
Вот что я пробовал до сих пор:
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"