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

Nhóm theo ngày, với 0 khi count () không có dòng nào

Cho rằng bạn không có ngày trong bảng, bạn cần một cách để tạo chúng. Bạn có thể sử dụng generate_series chức năng:

SELECT * FROM generate_series('2012-01-01'::timestamp, '2012-01-07 23:00', '1 hour') AS ts;

Điều này sẽ tạo ra kết quả như sau:

         ts          
---------------------
 2012-01-01 00:00:00
 2012-01-01 01:00:00
 2012-01-01 02:00:00
 2012-01-01 03:00:00
...
 2012-01-07 21:00:00
 2012-01-07 22:00:00
 2012-01-07 23:00:00
(168 rows)

Nhiệm vụ còn lại là nối hai lựa chọn bằng cách sử dụng một phép nối bên ngoài như sau:

select extract ( day from ts ) as day, extract ( hour from ts ) as hour,coalesce(count,0) as count from 
(
    SELECT  extract ( day from date ) as day , extract ( hour from date ) as hr ,count(*)
    FROM    sr
    where date>'2012-01-01' and date <'2012-01-07'
    GROUP BY   extract ( day from date ) , extract ( hour from date )
) AS cnt 
 right outer join ( SELECT * FROM generate_series ( '2012-01-01'::timestamp, '2012-01-07 23:00', '1 hour') AS ts ) as dtetable on extract ( hour from ts ) = cnt.hr and extract ( day from ts ) = cnt.day 
 order by day,hour asc;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL lưu trữ thông tin múi giờ nào?

  2. GIS:PostGIS / PostgreSQL so với MySql và SQL Server?

  3. PostgreSQL:Làm cách nào để đặt search_path ở cấp người dùng?

  4. pgp Dự đoán - Phân tích dự đoán trong PostgreSQL

  5. loại trừ các trường trùng lặp trong một phép nối