2

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

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
  • А как у вас связаны эти таблицы?
    – andreyqin
    2 окт 2014 в 7:30
  • statistics id sum user_id
    – Ali
    2 окт 2014 в 7:58
  • @Ali, Если вам дан исчерпывающий ответ, отметьте его как верный (нажмите на галку рядом с выбранным ответом). 2 окт 2014 в 8:33

1 ответ 1

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
2
  • Спасибо! Заработало)) А вообще как лучше делать структуру?
    – Ali
    2 окт 2014 в 8:16
  • Обновил ответ.
    – andreyqin
    2 окт 2014 в 8:29

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.