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

Hitungan dan penjumlahan tidak valid dalam kueri tab silang menggunakan PostgreSQL

Kesalahan pertama Anda tampaknya sederhana. Menurut parameter ke-2 dari crosstab() fungsi, 'Dubai' harus datang sebagai kota pertama (diurutkan berdasarkan kota). Detail:

Nilai tak terduga untuk totalsales dan totalamount mewakili nilai dari baris pertama untuk setiap name kelompok. Kolom "Ekstra" diperlakukan seperti itu. Detail:

Untuk mendapatkan jumlah per name , jalankan fungsi jendela di atas fungsi agregat Anda. Detail:

select * from crosstab (
   'select name
          ,sum(count(*))   OVER (PARTITION BY name)
          ,sum(sum(price)) OVER (PARTITION BY name)
          ,city
          ,count(city)
    from   products
    group  by name,city
    order  by name,city
    '
--  ,'select distinct city from products order by 1' -- replaced
    ,$$SELECT unnest('{Dubai,London,Melborun
                      ,Moscow,Munich,Shunghai}'::varchar[])$$
) AS tb (
    name varchar(20), TotalSales bigint, TotalAmount bigint
   ,Dubai bigint
   ,London bigint
   ,Melborun bigint
   ,Moscow bigint
   ,Munich bigint
   ,Shunghai bigint
   );

Lebih baik lagi, berikan set statis sebagai parameter ke-2. Kolom keluaran dikodekan secara keras, mungkin tidak dapat diandalkan untuk menghasilkan kolom data secara dinamis. Jika Anda baris lain dengan kota baru, ini akan rusak.
Dengan cara ini Anda juga dapat mengurutkan kolom sesuka Anda. Tetap sinkronkan kolom output dan parameter ke-2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORDER BY kolom yang terkadang kosong menggunakan Active Record &Rails

  2. Tidak Ada Kata Sandi yang Disediakan / Parameter Posisi tidak ditemukan PostgreSQL - Powershell

  3. Kesalahan:tidak dapat menentukan versi PostgreSQL dari '10.3' - Django di Heroku

  4. gem install pg error:tidak dapat memahami kern.osversion `14.0.0' di Yosemite dengan Ruby 2.1.5

  5. Laravel Eloquent truncate - Batasan kunci asing