@ozornick

Как в Mysql задать нужную группировку?

Здравствуйте. Никак не соображу каким образом сделать выборку.
Допустим есть таблица tbl1 и tbl2. В первой как бы расширенные данные, во второй нужно сохранить суммированный результат.
То есть tbl1 содержит статистику, например, nick, time, summa, id:
vovka1 1451353490 112.6 239
Jaguar 1451353504 112.7 239
vovka1 1451353518 112.8 239
Jaguar 1451353533 112.9 239
В tbl2 надо занести в виде максимального значения summa и уникального id. Чтобы получилось нечто, nick, summa, id, count (количество всех записей по полям nick и id ):
Jaguar 1451353533 112.9 239 2
vovka1 1451353518 112.8 239 2
  • Вопрос задан
  • 130 просмотров
Решения вопроса 2
@dmitryKovalskiy
программист средней руки
INSERT INTO tbl2(nick, summa, id, count )
SELECT nick,MAX(summa),id,COUNT(1) FROM tbl1
GROUP BY id,nick

Сначала попробуйте выполнить SELECT. Если сработает - выполняйте инсерт. Но если в tbl2 уже есть какие-то данные, то запрос надо будет дорабатывать.
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
Insert into tbl2 (name, id, maxtime, sumtime, timecount) 
select tbl1.name, tbl1.id, max(tbl1.time), sum(tbl1.time), count(1) from tbl1 group by tbl1.name, tbl1.id
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
select tbl1.nick tbl1.summa, tbl1.id, tmp2.cnt
from tbl1
inner join (
  select nick, max(summa) as summa from tbl1 group by nick
) as tmp using (nick, summa)
inner join (
  select nick, id, count(*) as cnt from tbl1 group by nick, id
) as tmp2 using (nick, id)
Ответ написан
Комментировать
@ozornick Автор вопроса
"select nick, id, max(time) as lasttime, MAX(price) as lastprice, count(1) as count from tbl1 group by nick, id"

Спасибо, ребят. Доработал как нужно. Важно было понять условие. Через PHP вставил строчки.
Алексей Уколов, слишком нагромождено
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы