демо: дб <> скрипка
Вы можете сделать это, используя предложение FILTER
для группирования, которое является специальным способом Postgres:
SELECT
my_date,
COUNT(score) FILTER (WHERE score BETWEEN 0 AND 2) AS "low0-2",
COUNT(score) FILTER (WHERE score BETWEEN 3 AND 4) AS "high3-4",
COUNT(score) FILTER (WHERE score = 5) AS "perfect"
FROM
scores
GROUP BY my_date
ORDER BY my_date
В противном случае вы можете воспользоваться более стандартным способом SQL, используя предложение CASE
:
SELECT
my_date,
SUM(
CASE
WHEN score BETWEEN 0 AND 2 THEN 1
ELSE 0
END
) AS "low0-2",
SUM(
CASE
WHEN score BETWEEN 3 AND 4 THEN 1
ELSE 0
END
) AS "high3-4",
SUM(
CASE
WHEN score = 5 THEN 1
ELSE 0
END
) AS "perfect"
FROM
scores
GROUP BY my_date
ORDER BY my_date