GROUP BY получить первую строку, остальные откинуть

ccop

Новичок
GROUP BY получить первую строку, остальные откинуть

Есть запрос:
[SQL]
SELECT category AS cat, author_id, SUM( num_show + is_song *20 + is_gold_fond *100 ) AS rsum, COUNT( * ) AS recount
FROM `poetics`
GROUP BY category, author_id
ORDER BY category ASC, rsum DESC
[/SQL]

Как результат получаю:
Код:
cat   	  author_id   	  rsum   	  recount
49   	  4 		 665 		  3
49 	  11 		 77 		  1
51 	  7 		 766 		  1
51 	  4 		 354 		  2
58 	  5 		 1 		  1

За сделать LIMIT для каждого результата GROUP BY category, что бы откинуть строки
Код:
49 	  11 	                  77 	  1
51 	  4 	                  354 	  2
т.е. получить первую строку, остальные откинуть...?
 

vadim

Guest
ccop
Насколько понимаю, нужен максимальный rsum. Так??
Тогда можно попробывать использовать MAX(rsum)
В этом случае будет выбрана всего одна строка
 

ccop

Новичок
использовать где?
В MAX(rsum) в SELECT поставить нельзя.
GROUP BY тоже, в HAVING также выдает ошибку.
 

Necromant

Новичок
[sql]
SELECT category AS cat, author_id, SUM( num_show + is_song * 20 + is_gold_fond * 100 ) AS rsum, COUNT( * ) AS recount
FROM `poetics`
WHERE NOT( (cat=49 AND author_id=11) OR (cat=51 AND author_id=4))
GROUP BY category, author_id
ORDER BY category ASC , rsum DESC
[/sql]
 

ccop

Новичок
Necromant, :)
Этот вариант никак использовать нельзя.
1. Я не знаю какие есть разделы и ИД авторов.
2. Категорий и документов может быть бесконечное множество, все это а WHERE не запихнешь...

Нужен другой способ...
 

vadim

Guest
ccop
а так не идёт??
PHP:
SELECT cat,SUM(num_show + is_song * 20 + is_gold_fond * 100) as rsum,MAX(rsum)
FROM `poetics` 
GROUP BY category, author_id
ORDER BY category ASC
 

ccop

Новичок
vadim
Нет, MySQL не воспринимает alias `rsum`...
Ошибка: Unknown column 'rsum' in 'field list'

-~{}~ 16.04.06 13:32:

rsum можно использовать, как я понимаю, только в HAVING.
 

vadim

Guest
а HAVING(MAX(rsum)) тоже не идёт??? Хотя наверно врядли
 

ccop

Новичок
Попытался реализовать такой запрос:
[SQL]
SET @n :=0; SELECT @n, IF(@n<>category,1,0) AS numrow, category AS cat, author_id, SUM( num_show + is_song *20 + is_gold_fond *100 ) AS rsum, COUNT( * ) AS recount, @n:=category
FROM `poetics`
GROUP BY category, author_id HAVING numrow=1
ORDER BY category ASC, rsum DESC
[/SQL]


Но вот резульатат:
Код:
 @n   	  numrow   	  cat   	  author_id   	  rsum   	  recount   	  @n := category
0 		1 		49 		4 		665 		3 		49
51 		1 		49 		11 		77 		1 		49
49 		1 		51 		7 		766 		1 		51
58 		1 		51 		4 		354 		2 		51
49 		1 		58 		5 		1 		1 		58
Видим что последний столбик принимает правильные значения (@n равен номеру категории), а вот уже при след запуске запроса (на уровне MySQL) видим, что @n поменялась, почему это так?
 

vadim

Guest
ccop
Можно попробывать субзапрос сделать
то есть динамически создавать таблицу, где будут все баллы подсчитаны (то есть то, что сейчас получается) и из этой таблицы уже MAX категорию выбирать

После FROM тоже же можно подзапрос делать, то есть
....FROM (SELECT.....) as tbl ......
 

Necromant

Новичок
[sql]
SELECT category AS cat, author_id, SUM( num_show + is_song * 20 + is_gold_fond * 100 ) AS rsum, COUNT( * ) AS recount
FROM `poetics`
GROUP BY category
ORDER BY category ASC , rsum DESC
[/sql]
На , 2 групировка ??? , если ті о нее пітаешься избавится ????
 

ccop

Новичок
Нужно делить на две группы, так как тогда сумма будет не той... Мне нужно узнать максимальное колв-во балов для каждого автора по каждой группе. А так я узнаю только сумму по группе для всех авторов.
Код:
cat  author_id  rsum  recount  
49 	4 	742 	4 
51 	4 	1120 	3 
58 	5 	1 	1
 

ccop

Новичок
Мне нужно узнать максимально кол-во балов и автора по каждой категории.
 

Necromant

Новичок
ну дык, тогда через временную таблицу
[sql]
CREATE TEMPORARY tbl_name SELECT ...
SELECT MAX(rsum) as max_rsum, tbl_name.* FROM tbl.name GROUP BY autor_id
[/sql]
 
Сверху