Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите допилить!!! / 14 сообщений из 14, страница 1 из 1
04.12.2014, 15:42:19
    #38825044
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
есть таблица заказов order (id, user_id(внешний ключ к таблице user (id)),amount(сумма заказа)) и user (id, login(имя покупателя))
необходимо найти кто и сколько потратил максимальное количество денег (каждый из пользователей мог совершить несколько покупок)

в ступор вводит то, что нельзя использовать одновременно 2е ф-ии агрегирования === max(sum(amount)) ===
...
Рейтинг: 0 / 0
04.12.2014, 15:43:37
    #38825049
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
dystyle, дошел только до этого этапа:

select user.id,user.login, sum(amount) as `sum`
from `user`,`order`
where user.id=order.user_id
group by user.id
order by `sum` DESC
...
Рейтинг: 0 / 0
04.12.2014, 15:48:08
    #38825057
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
Осталось добавить LIMIT 1.

Хотя я бы сделал так:
Код: sql
1.
2.
3.
4.
SELECT user.id, user.login, t.sum_amount
FROM user,
(SELECT order.user_id, sum(amount) sum_amount FROM order GROUP by order.user_id ORDER BY 2 DESC LIMIT 1) t
WHERE user.id=t.user_id
...
Рейтинг: 0 / 0
04.12.2014, 15:58:42
    #38825075
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
miksoft, спасибо за отклик, но этот вариант не подходит.... а если у 2х пользователей одинаковые суммы?
...
Рейтинг: 0 / 0
04.12.2014, 16:00:02
    #38825078
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
dystyleа если у 2х пользователей одинаковые суммы?В задаче ничего про это не сказано, т.е. допустимо любой решение.
...
Рейтинг: 0 / 0
04.12.2014, 16:05:43
    #38825088
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
miksoft, sorry - это мое упущение!!
...
Рейтинг: 0 / 0
04.12.2014, 16:11:14
    #38825100
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
Ну если нужно выводить всех, то вместо LIMIT 1 делаете его эмуляцию на переменных. Т.е. выдаете не ровно одну запись, а все, у которых сумма совпадает с предыдущей.
...
Рейтинг: 0 / 0
04.12.2014, 16:19:17
    #38825118
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
miksoftНу если нужно выводить всех, то вместо LIMIT 1 делаете его эмуляцию на переменных. Т.е. выдаете не ровно одну запись, а все, у которых сумма совпадает с предыдущей.

не до конца понимаю, как это граммотно можно сделать?
...
Рейтинг: 0 / 0
04.12.2014, 16:24:38
    #38825128
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
dystyle,

Покажите пример исходных данных и то, что вы хотите видеть
кто и сколько потратил максимальное количество денег
это просто за гранью русского языка
...
Рейтинг: 0 / 0
04.12.2014, 17:29:03
    #38825235
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
JeStonedystyle,

Покажите пример исходных данных и то, что вы хотите видеть
кто и сколько потратил максимальное количество денег
это просто за гранью русского языка
...
Рейтинг: 0 / 0
04.12.2014, 17:45:18
    #38825249
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
dystyle,
Ладно, попробую отталкиваться от вот этого
max(sum(amount))

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT u.id, u.login, o.sum_amount
FROM `user` u
LEFT JOIN (
SELECT `order`.user_id, sum(amount) sum_amount 
FROM `order`
GROUP BY `order`.user_id) o ON u.id = o.user_id
INNER JOIN (
SELECT MAX(v.sum_amount) AS sum_amount
FROM (
SELECT `order`.user_id, sum(amount) sum_amount 
FROM `order`
GROUP BY `order`.user_id) v) v ON o.sum_amount = v.sum_amount
...
Рейтинг: 0 / 0
04.12.2014, 18:08:25
    #38825294
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
JeStone, ооо... оказывается все было на поверхности) спасибо огромное за помощь!
...
Рейтинг: 0 / 0
04.12.2014, 18:10:36
    #38825298
dystyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
dystyle, Всем спасибо! всё прикрутил!
...
Рейтинг: 0 / 0
04.12.2014, 18:17:55
    #38825318
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите допилить!!!
Я бы предложил LEFT JOIN заменить на JOIN. Толку от него все равно никакого, но, может, хоть побыстрее будет, если user-ов много.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите допилить!!! / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]