Sqlite 3.30 добавлена поддержка предложений FILTER
для агрегатных функций. Я думаю, что когда это возможно, это делает запрос чище и проще для понимания, чем CASE
, который вы должны использовать в более старых версиях (в частности, вы можете использовать count()
вместо sum()
, что лучше передает то, что вы на самом деле пытаетесь для расчета).
SELECT ColA
, count(ColB) FILTER (WHERE ColB = 'mild') AS Mild
, count(ColB) FILTER (WHERE ColB = 'moderate') AS Moderate
, count(ColB) FILTER (WHERE ColB = 'high') AS High
FROM cities
GROUP BY ColA
ORDER BY ColA;
ColA Mild Moderate High
---------- ---------- ---------- ----------
Atlanta 1 2 0
Houston 0 2 0
Miami 1 0 1