PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Obliczanie wartości procentowych za pomocą zapytania GROUP BY

WITH t1 AS 
 (SELECT User, Rating, Count(*) AS n 
  FROM your_table
  GROUP BY User, Rating)
SELECT User, Rating, n, 
       (0.0+n)/(COUNT(*) OVER (PARTITION BY User)) -- no integer divide!
FROM t1;

Lub

SELECT User, Rating, Count(*) OVER w_user_rating AS n, 
        (0.0+Count(*) OVER w_user_rating)/(Count(*) OVER (PARTITION BY User)) AS pct
FROM your_table
WINDOW w_user_rating AS (PARTITION BY User, Rating);

Chciałbym zobaczyć, czy jeden z tych lub drugich daje lepszy plan zapytań z odpowiednim narzędziem dla twojego RDBMS.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolejność zwrotu wiersza SQL

  2. PostgreSQL - ustaw domyślną wartość komórki zgodnie z inną wartością komórki

  3. Ułatwianie zarządzania produkcyjną bazą danych PostgreSQL

  4. Import PostgreSQL CSV z wiersza poleceń

  5. connection.select_value zwraca tylko ciągi w postgresie z pg gem