🔵Когда-то давно мне на собесах попадались задачки, где нужно было вывести показатели либо в одном столбце, но в разных строчках, либо в разных столбцах, но в одной строке.
Тогда я затупила, но у вас есть шансы пропустить этот этап😁
Они проверяли знание union и case when:
1️⃣ UNION/UNION ALL - для одного столбца
SELECT 'amt_not_null' as agg_type, SUM(amount) AS val
FROM test
WHERE id IS NOT NULL
UNION ALL
SELECT 'amt_null', SUM(amount)
FROM test
WHERE id IS NULL
UNION - удаляет дубликаты строк, UNION ALL - нет.Если разницы для запроса нет, лучше выбирать
UNION ALL, потому что без проверки на дубли он более производительный.Элиасы во втором и последующем запросах можно не указывать, они будут тянуться из первого.
2️⃣ CASE WHEN - для разных столбцов
SELECT
SUM(CASE WHEN id IS NOT NULL THEN amount ELSE 0 END) AS amt_not_null,
SUM(CASE WHEN id IS NULL THEN amount ELSE 0 END) AS amt_null
FROM test
#sql_tips