CREATE TABLE sample ( id int, num int, cond BOOLEAN );
INSERT INTO sample (id, num, cond) VALUES (1, 100, true), (1, 20, true), (1, 50, false), (1, 75, false), (2, 20, false), (2, 80, true), (2, 50, false), (1, 10, true);
Выводим сумму num для каждого id
SELECT id, SUM(num) FROM sample GROUP BY id; id | sum ----+----- 2 | 150 1 | 255
Здесь тоже самое, но с условием, что cond = true
SELECT id, SUM(num) AS sum_with_true_cond FROM sample WHERE cond = true GROUP BY id; id | sum_with_true_cond ----+-------------------- 2 | 80 1 | 130
Здесь cond = false
SELECT id, SUM(num) AS sum_with_false_cond FROM sample WHERE cond = false GROUP BY id; id | sum_with_false_cond ----+--------------------- 2 | 70 1 | 125
Задача же заключается в том, чтобы выбрать одновременно sum_with_true_cond и sum_with_false_cond
в резултате должно получится вот что:
id | sum_with_true_cond | sum_with_false_cond ----+--------------------+--------------------- 2 | 80 | 70 1 | 130 | 125
А сделать два отдельных
А сделать два отдельных запроса, а потом либо JOIN либо UNION пробовали?
SELECT id, SUM(num) AS
Это не совсем то что нужно
Здесь я использую t для избежания ситуации, когда окажутся записи с cond = true, а с cond = false - нет, или наоборот.
Может можно упростить ?
Здесь вряд ли, потому что вы
Здесь вряд ли, потому что вы хотите дважды обсчитать одну таблицу по разным условиям. Так что по факту у вас получается две разные таблицы, которые имеют одну общую колонку id, по которой и можно выполнить JOIN. Я бы написал что-то типа:
я не тормоз... SELECT
я не тормоз...