PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

sql - групиране по в диапазони, за да включите диапазони без стойности

Опитайте тази заявка (също на SQL Fiddle ):

WITH ranges AS (
    SELECT (ten*10)::text||'-'||(ten*10+9)::text AS range,
           ten*10 AS r_min, ten*10+9 AS r_max
      FROM generate_series(0,9) AS t(ten))
SELECT r.range, count(s.*)
  FROM ranges r
  LEFT JOIN scores s ON s.score BETWEEN r.r_min AND r.r_max
 GROUP BY r.range
 ORDER BY r.range;

РЕДАКТИРАНЕ:

Можете лесно да коригирате диапазона, като промените параметрите на generate_series() . Възможно е да използвате следната конструкция, за да сте сигурни, че ranges винаги ще покрива вашите резултати:

SELECT (ten*10)::text||'-'||(ten*10+9)::text AS range,
       ten*10 AS r_min, ten*10+9 AS r_max
  FROM generate_series(0,(SELECT max(score)/10 FROM scores)) AS t(ten))

за ranges CTE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails Postgresql множество схеми и едно и също име на таблица

  2. Как си взаимодействат прозоречните функции и групата по клауза?

  3. Ръководство за Pgpool за PostgreSQL:Част втора

  4. Как да заявите postgres инкрементални актуализации от определена точка (клеймо за време или идентификатор на транзакция)?

  5. Как да направите масив от SELECT, връщащ повече от един ред