Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengelompokkan dan menghitung

Anda dapat menggunakan yang berikut ini:

SELECT  Team, TotalWins, FirstWin, LastWin
FROM    (   SELECT  Team, 
                    WL,
                    COUNT(*) TotalWins,
                    MIN("Date") FirstWin,
                    MAX("Date") LastWin,
                    ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY COUNT(*) DESC) RowNumber
            FROM    (   SELECT  Team,
                                "Date",
                                WL, 
                                ROW_NUMBER() OVER(PARTITION BY Team ORDER BY "Date") - ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY "Date") Grouping
                        FROM    T
                    ) GroupedData
            WHERE   WL = 'W'
            GROUP BY Team, WL, Grouping
        ) RankedData
WHERE   RowNumber = 1;

Ini menggunakan ROW_NUMBER untuk menentukan peringkat setiap permainan yang dipartisi oleh tim, dan juga berdasarkan hasil, perbedaan antara keduanya unik untuk setiap grup hasil berturut-turut. Jadi untuk tim pertama Anda, Anda akan memiliki:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
Team_1  07/01/0012  L   3       1   2
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
Team_1  30/01/0012  L   6       2   4
Team_1  14/02/0012  W   7       5   2
Team_1  17/02/0012  L   8       3   5
Team_1  20/02/0012  W   9       6   3

Dimana RN1 hanya dipartisi oleh tim, dan rn2 dipartisi oleh tim dan hasilnya.

Seperti yang Anda lihat, jika Anda menghapus Kerugian maka kolom DIFF bertambah satu untuk setiap kelompok kemenangan berturut-turut:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
---------------------------------------
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
---------------------------------------
Team_1  14/02/0012  W   7       5   2
---------------------------------------
Team_1  20/02/0012  W   9       6   3

Anda kemudian dapat mengelompokkan berdasarkan ini untuk memastikan Anda melihat kemenangan berturut-turut, dan melakukan hitungan untuk mendapatkan hasil maksimal. Saya kemudian baru saja menggunakan nomor baris lain untuk mendapatkan kemenangan berturut-turut maksimum per tim.

Contoh pada SQL Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sumber data JNDI ke oracle dengan grails 1.3

  2. Oracle ADF di JBoss:Masalah Koneksi Jdbc yang dibungkus

  3. Pilih dan Sisipkan di dblink

  4. ... di mana count(col)> 1

  5. Penanganan DML dan Pengecualian - Oracle