Повеселимся с MySQL, задавая сложные вопросы.
По сути, у меня есть таблица, полная транзакций, и из этого я хочу определить из всех доступных продуктов (productid
), кто (userid
) купил большую часть каждого?Тип в предложении where относится к типу транзакции, где 1 - покупка.
У меня есть подзапрос, который сам по себе возвращает список суммированных продуктов, купленных для каждого человека, и он сам по себе работает хорошо.Из этого я пытаюсь выбрать максимум суммированных количеств и сгруппировать по продуктам, что является довольно простым агрегатом.К сожалению, это дает мне забавные результаты!userid
не соответствует правильно заявленным максимальным productid
продажам.
select
`userid`, `productid`, max(`sumqty`)
from
(select
`userid`, `productid`, sum(`qty`) as `sumqty`
from
`txarchive`
where
`type` = 1
group by `userid`,`productid`) as `t1`
group by `productid`
Я удалил все внутренние объединения, чтобы дать больше словесных результатов, поскольку они не меняют логику всего этого.
Вот структура tx
, если вы заинтересованы.
id bigint(20) #transaction id
UserID bigint(20) #user id, links to another table.
ProductID bigint(20) #product id, links to another table.
DTG datetime #date and time of transaction
Price decimal(19,4) #price per unit for this transaction
QTY int(11) #QTY of products for this transaction
Type int(11) #transaction type, from purchase to payment etc.
info bigint(20) #information string id, links to another table.
* edit Рабочий окончательный запрос: (его biggish)
select
`username`, `productname`, max(`sumqty`)
from
(select
concat(`users`.`firstname`, ' ', `users`.`lastname`) as `username`,
`products`.`name` as `productname`,
sum(`txarchive`.`qty`) as `sumqty`
from
`txarchive`
inner join `users` ON `txarchive`.`userid` = `users`.`id`
inner join `products` ON `txarchive`.`productid` = `products`.`id`
where
`type` = 1
group by `productname`,`username`
order by `productname`,`sumqty` DESC) as `t1`
group by `productname`
order by `sumqty` desc