Как выбрать всех пользователей по общей сумме, на которую они купили?

Рейтинг: 2Ответов: 1Опубликовано: 02.10.2014

Есть две таблицы - пользователи и их покупки:

users
 id
 name

statistics
 id
 sum
 user_id

Нужно, в общем, выбрать всех пользователей по общей сумме, на которую они купили.
Делаю запрос, почему-то не работает:

SELECT user.*
FROM users, (SELECT SUM(statistics.sum) FROM statistics) as sum
ORDER BY sum DESC

Ответы

▲ 3

Вообще, структура у вас неверная. Тем не менее попробуйте так:

SELECT u.name,
       SUM(s.sum) AS sum 
  FROM users u
  JOIN statistics s
    ON s.user_id = u.id
  GROUP BY u.name
  ORDER BY sum DESC

Обновление

Лучше делать 3 таблицы:

users: id | name
products: id | name | price
orders: id | user_id | product_id | quantity

А запрос будет выглядеть так:

SELECT u.name,
       SUM(p.price * o.quantity) AS sum
  FROM users u
  JOIN orders o
    ON o.user_id = u.id
  JOIN products p
    ON p.id = o.product_id
  GROUP BY u.name
  ORDER BY sum DESC