PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

sql - nhóm theo phạm vi để bao gồm các phạm vi không có giá trị

Hãy thử truy vấn này (cũng trên 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;

CHỈNH SỬA:

Bạn có thể dễ dàng điều chỉnh phạm vi bằng cách thay đổi các tham số thành generate_series() . Có thể sử dụng cấu trúc sau để đảm bảo ranges sẽ luôn bao gồm điểm số của bạn:

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))

cho các phạm vi 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. thay đổi cột theo thời gian với múi giờ thành dấu thời gian

  2. Nhận đường dẫn từ cơ sở dữ liệu các điểm trong sql

  3. Django không thể thả cơ sở dữ liệu:psycopg2.OperationalError:không thể thả cơ sở dữ liệu hiện đang mở

  4. Postgres UPDATE to_tsvector cập nhật tất cả các hàng thành cùng một giá trị

  5. Làm cách nào để có chức năng ngoại tuyến hoàn chỉnh trong ứng dụng web với cơ sở dữ liệu PostgreSQL?