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

в ступор вводит то, что нельзя использовать одновременно 2е ф-ии агрегирования === max(sum(amount)) ===
...
Рейтинг: 0 / 0
помогите допилить!!!
    #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
помогите допилить!!!
    #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
помогите допилить!!!
    #38825075
dystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, спасибо за отклик, но этот вариант не подходит.... а если у 2х пользователей одинаковые суммы?
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825078
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dystyleа если у 2х пользователей одинаковые суммы?В задаче ничего про это не сказано, т.е. допустимо любой решение.
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825088
dystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, sorry - это мое упущение!!
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825100
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если нужно выводить всех, то вместо LIMIT 1 делаете его эмуляцию на переменных. Т.е. выдаете не ровно одну запись, а все, у которых сумма совпадает с предыдущей.
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825118
dystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНу если нужно выводить всех, то вместо LIMIT 1 делаете его эмуляцию на переменных. Т.е. выдаете не ровно одну запись, а все, у которых сумма совпадает с предыдущей.

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

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

Покажите пример исходных данных и то, что вы хотите видеть
кто и сколько потратил максимальное количество денег
это просто за гранью русского языка
...
Рейтинг: 0 / 0
помогите допилить!!!
    #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
помогите допилить!!!
    #38825294
dystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JeStone, ооо... оказывается все было на поверхности) спасибо огромное за помощь!
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825298
dystyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dystyle, Всем спасибо! всё прикрутил!
...
Рейтинг: 0 / 0
помогите допилить!!!
    #38825318
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы предложил LEFT JOIN заменить на JOIN. Толку от него все равно никакого, но, может, хоть побыстрее будет, если user-ов много.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите допилить!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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