sql >> Databáze >  >> RDS >> PostgreSQL

Výpočet procent pomocí dotazu 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;

Nebo

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);

Chtěl bych zjistit, zda jeden z těchto nebo druhých poskytuje lepší plán dotazů s vhodným nástrojem pro vaše RDBMS.



  1. Měření výkonu databáze pod tlakem

  2. Vytvoření tabulky z dotazu pomocí jiného tabulkového prostoru (Oracle SQL)

  3. Pochopení rozdílů mezi Table a Transaction API

  4. Je SELECT nebo INSERT ve funkci náchylný k závodům?