sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan gør man procent/total i SQL?

MySQL:

SELECT ROUND(
  100.0 * (
      SUM(IF(cust_id = 541, 1, 0)) / COUNT(order_id)
  ), 1) AS percent_total
FROM orders;

Rediger

Jeg tror, ​​det hjælper, hvis jeg ville have bemærket postgres tag. Jeg troede, det var et MySQL-spørgsmål.

PostgreSQL:

SELECT ROUND(
  100.0 * (
      SUM(CASE WHEN cust_id = 541 THEN 1 ELSE 0 END)::numeric / COUNT(order_id)
  ), 1) AS percent_total
FROM orders;

P.S. Min PostgreSQL er rusten, så hvis MySQL-forespørgslen virker på PostgreSQL vil jeg gerne vide det :)

Rediger 2

Jeg kan ikke understrege nok til at være på vagt over for tælle(*)-forslaget nedenfor. Du vil generelt gerne undgå dette med PostgreSQL.



  1. Vælg de 3 seneste poster, hvor værdierne i én kolonne er forskellige

  2. Fra XML til liste over stier i Oracle PL/SQL-miljø

  3. Har du lov til at bruge tal som tabelnavne i MySQL?

  4. Hvordan får man forskellen i år fra to forskellige datoer?