Skip to content
Advertisement

How To Do Percent/Total in SQL?

I have an typical CUSTOMER/ORDERS set of tables and I want to display the total percentage of sales a particular customer is responsible for. I can get the total number of orders in the system like so:

SELECT COUNT(order_id) FROM orders

And I can get the the total number of orders made by the customer like so:

SELECT COUNT(order_id) FROM orders WHERE cust_id = 541

How can I combine these into a single query that returns the percentage of sales for a particular customer? Thanks!

Advertisement

Answer

MySQL:

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

Edit

I guess it helps if I would have noticed the postgres tag. I thought it was a MySQL question.

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. My PostgreSQL is rusty, so if the MySQL query works on PostgreSQL I’d like to know 🙂

Edit 2

I can’t stress enough to be wary of the count(*) suggestion below. You generally want to avoid this with PostgreSQL.

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement