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

Menghitung persentase diputar lagi keesokan harinya

Dengan asumsi definisi tabel memiliki inti yang solid ini:

CREATE TABLE game_table (
  user_id   bigint NOT NULL
, date      date   NOT NULL  -- date, not text!
, game_name text   NOT NULL
, UNIQUE (date, game_name, user_id)  -- !
);

Dan dengan asumsi Anda berarti pemain yang sama memainkan game yang sama keesokan harinya:

SELECT round(ct_day2 * 100.0 / ct_day1, 2) AS repeat_percentage
FROM  (
   SELECT count(*) AS ct_day1
        , count(d2.user_id) AS ct_day2
   FROM   instant_game_sessions d1
   LEFT   JOIN instant_game_sessions d2 ON (d2.user_id, d2.game_name, d2.date)
                                         = (d1.user_id, d1.game_name, d1.date + 1)
   WHERE  d1.date = '2021-01-07'
   AND    d1.game_name = 'Chess'
   ) sub;

UNIQUE kendala memastikan hanya ada satu pertandingan di hari berikutnya. Jadi count(*) adalah hitungan yang benar untuk hari 1, dan count(d2.user_id) untuk hari 2. Sisanya sudah jelas.

UNIQUE kendala (dengan nama kolom dalam urutan ini!) juga menyediakan indeks yang sempurna untuk kueri. Lihat:

Perhatikan bahwa konstanta numerik 100.0 default ke numerik secara otomatis, jadi kita tidak perlu menambahkan pemeran tipe eksplisit apa pun. Terkait:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan meteor dengan postgresql

  2. PostgreSQL di Docker - pg_hba.conf untuk mengizinkan akses dari host ke container

  3. regexp_matches cara yang lebih baik untuk menghilangkan tanda kurung kurawal

  4. Kueri berparameter dengan psycopg2 / Python DB-API dan PostgreSQL

  5. pgadmin memberi saya kesalahan:tidak ada kata sandi yang diberikan