SQLite, GROUP BY с ДИАПАЗОНОМ - PullRequest
0 голосов
/ 02 июня 2018

Я работаю со следующим запросом:

SELECT p.bp_pod, COUNT(j.max) as 'COUNT',
SUM (CASE WHEN j.max <= 120 AND j.min <= 80 THEN 1 ELSE 0 END),
SUM (CASE WHEN  j.max > 120 AND j.max < 140 OR j.min > 80 AND j.min < 90 THEN 1 ELSE 0 END),
SUM (CASE WHEN  j.max >= 140 OR j.min >= 90 THEN 1 ELSE 0 END)
FROM (SELECT 0 as bp_pod UNION ALL
SELECT 1 as bp_pod UNION ALL
SELECT 2 as bp_pod )
p LEFT JOIN
tb_journal j
ON p.bp_pod = j.bp_pod
GROUP BY p.bp_pod LIMIT 0, 90;

Но этот запрос группирует записи в соответствии с bp_pod, который может иметь только три значения: 0, 1, 2.

Вотtable Я работаю с

CREATE TABLE "table" ( `bp_pod` NUMERIC, `max` NUMERIC, `min` NUMERIC )

и вот некоторые значения, с которыми я работаю:

INSERT INTO table VALUES('21', '134', '78');
INSERT INTO table VALUES('13', '126', '88');
INSERT INTO table VALUES('6', '97', '54');

Теперь я изменил приложение, и оно может иметь несколько значений, поэтому янужно реализовать GROUP BY с диапазонами, что-то вроде:

bp_pod > 5 AND bp_pod < 12
bp_pod >= 12 AND bp_pod < 21
bp_pod >= 21 AND bp_pod < 24

, но включить такой диапазон в индекс pod 0, 1, 2.

Ожидаемый результат здесь ниже:

pod    COUNT   range_1 range_2 range_3
0       0       1        0       0
1       0       0        1       0
2       0       0        0       1

Есть подсказка?Спасибо.

1 Ответ

0 голосов
/ 02 июня 2018

Вы должны быть осторожны из-за left join.Я думаю, что это делает то, что вы хотите:

SELECT p.pod,
       COUNT(j.bp_max) as 'COUNT',
       SUM(CASE WHEN j.max <= 120 AND j.min <= 80 THEN 1 ELSE 0 END),
       SUM(CASE WHEN j.max > 120 AND j.max < 140 OR j.min > 80 AND j.min < 90 THEN 1 ELSE 0 END),
       SUM(CASE WHEN j.max >= 140 OR j.min >= 90 THEN 1 ELSE 0 END)
FROM (SELECT 0 as bp_pod, 5 as minb, 12 as maxb UNION ALL
      SELECT 1 as bp_pod, 12, 21 UNION ALL
      SELECT 2 as bp_pod, 21, 24
     ) p LEFT JOIN
     tb_journal j
     ON j.bp_pod >= p.minb AND j.bp_pod < p.maxb
GROUP BY p.bp_pod;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...