PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tetapkan nilai total bulan ke setiap hari dalam sebulan

demos:db<>biola

SELECT
    s1.sales_date,
    s1.country,
    s1.sales_volume,
    s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None' 
    AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)

Anda membutuhkan self-join yang alami. Syarat bergabung adalah:

  1. Tabel pertama tanpa None catatan (s1.country <> 'None' )
  2. Tabel kedua hanya None catatan (s2.country = 'None' )
  3. Tanggal:Hanya pertimbangkan bagian tahun dan bulan, abaikan hari. Ini dapat dicapai dengan menormalkan tanggal kedua tabel ke awal bulan dengan menggunakan date_trunc() . Jadi, misalnya '2020-02-15' menghasilkan '2020-02-01' dan '2020-02-29' menghasilkan '2020-02-01' juga, yang berfungsi dengan baik sebagai perbandingan dan kondisi gabungan.

Alternatifnya :

SELECT
    *
FROM (
    SELECT
        sales_date,
        country,
        sales_volume,
        SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
    FROM sales 
) s
WHERE country <> 'None'

Anda dapat menggunakan SUM() fungsi jendela di atas grup date_trunc() seperti yang dijelaskan di atas. Maka Anda perlu memfilter None catatan setelahnya



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aplikasi Boot Musim Semi. Batch tidak berfungsi dalam metode JpaRepository.saveAll

  2. Menggunakan Postgresql dengan Grails :Urutan atau tabel yang hilang:hibernate_sequence

  3. Dapatkan semua prosedural, fungsi yang ditentukan pengguna

  4. Rails 3.1 - Mendorong ke Heroku - Kesalahan saat memasang adaptor postgres?

  5. Ukuran Tabel Partisi di PostgreSQL 9.0