GROUP BY и сортировка - Visavi.net
https://visavi.net/
RSS - Visavi.nethttps://visavi.net/assets/img/images/logo_small.pngRSS - Visavi.net
https://visavi.net/
[email protected] (admin)[email protected] (admin)Sun, 01 Dec 2024 03:57:28 +030020. <strong>Aligan</strong>, не 1, а 6 он возвращает. я в 19 посте подредактировал немного твой запрос.<br>
21. <strong>Aligan</strong>, мне подзапросы не нужны<img src="https://visavi.net/uploads/stickers/smile.gif" alt="smile">
https://visavi.net/topics/11597/205511
GROUP BY и сортировка SDFri, 16 Jul 2010 14:47:13 +0400Сообщенияhttps://visavi.net/topics/11597/205511Вот правильный запрос<br>
<pre class="prettyprint">
SELECT
`id`,
`name`,
MAX(`score`) AS max ,
(select count(*) from gg where name = 'vasya') AS cnt
FROM
`gg`
WHERE `name` = 'vasya'
GROUP BY id order by max desc limit 1
</pre>
https://visavi.net/topics/11597/205391
GROUP BY и сортировка ОлегFri, 16 Jul 2010 12:10:33 +0400Сообщенияhttps://visavi.net/topics/11597/205391За исключением того что cnt вернет 1 всегда. В данном случае поле cnt обязательно?
https://visavi.net/topics/11597/205387
GROUP BY и сортировка ОлегFri, 16 Jul 2010 12:04:58 +0400Сообщенияhttps://visavi.net/topics/11597/205387тогда так:<br>
<pre class="prettyprint">
SELECT `id`, `name`, count(*) AS cnt, MAX(`score`) AS max FROM `gg` WHERE `name` = 'vasya'
GROUP BY `name`
order by max desc
</pre>
вроде правильно выводит пока. Там посмотрим. спасибо.
https://visavi.net/topics/11597/205386
GROUP BY и сортировка SDFri, 16 Jul 2010 12:03:26 +0400Сообщенияhttps://visavi.net/topics/11597/205386Хотя нет, подсчет вернет 1
https://visavi.net/topics/11597/205385
GROUP BY и сортировка ОлегFri, 16 Jul 2010 12:00:34 +0400Сообщенияhttps://visavi.net/topics/11597/205385Тогда так<br>
<pre class="prettyprint">SELECT `id`, `name`, count(*) AS cnt, MAX(`score`) AS max FROM `gg` WHERE `name` = 'vasya'
GROUP BY id
order by max desc limit 1</pre>
https://visavi.net/topics/11597/205383
GROUP BY и сортировка ОлегFri, 16 Jul 2010 11:59:25 +0400Сообщенияhttps://visavi.net/topics/11597/20538315. <strong>Aligan</strong>, если есть алиасы - группировка обязательна. этот запрос не катит.
https://visavi.net/topics/11597/205313
GROUP BY и сортировка SDFri, 16 Jul 2010 10:41:55 +0400Сообщенияhttps://visavi.net/topics/11597/205313Одним запросом не получится. Когда агрегаты смешиваются с столбцами, выполнение запроса неоднозначано.<br>
Первый запрос можно совершить так<br>
<pre class="prettyprint">SELECT `id`, `name`, count(*) AS cnt, MAX(`score`) AS max FROM `gg` WHERE `name` = 'vasya' </pre>
Ну а далее чтобы получить id, составить второй запрос тебе не проблема
https://visavi.net/topics/11597/205263
GROUP BY и сортировка ОлегFri, 16 Jul 2010 05:04:35 +0400Сообщенияhttps://visavi.net/topics/11597/205263На поле name добавь индекс, иначе при больших объемов дольше будет выполнятся запрос.<br>
И вообще лучше вместо name хранить id пользователя
https://visavi.net/topics/11597/205261
GROUP BY и сортировка ОлегFri, 16 Jul 2010 04:35:10 +0400Сообщенияhttps://visavi.net/topics/11597/205261дополнение к посту #11: первая запись на выходе - не с максимальным 'score', а та, которая на первом месте в таблице. Т.е. 'score' берется с нее.
https://visavi.net/topics/11597/205255
GROUP BY и сортировка SDFri, 16 Jul 2010 03:55:00 +0400Сообщенияhttps://visavi.net/topics/11597/205255вот пример таблицы. Из нее, например надо получить результат вида:<br>
id - 6<br>
cnt - 6<br>
name - vasya<br>
score - 6<br>
<pre class="prettyprint">
CREATE TABLE `gg` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(64) NOT NULL,
`score` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
--
-- Дамп данных таблицы `gg`
--
INSERT INTO `gg` VALUES (1, 'vasya', '1');
INSERT INTO `gg` VALUES (2, 'vasya', '2');
INSERT INTO `gg` VALUES (3, 'vasya', '3');
INSERT INTO `gg` VALUES (4, 'vasya', '4');
INSERT INTO `gg` VALUES (5, 'vasya', '5');
INSERT INTO `gg` VALUES (6, 'vasya', '6');</pre>
https://visavi.net/topics/11597/205254
GROUP BY и сортировка SDFri, 16 Jul 2010 03:48:35 +0400Сообщенияhttps://visavi.net/topics/11597/205254Нет. Смотри. Мне нужно вывести из таблицы запись с определнным 'name'(это поле у каждого юзера свое - записей с одинаковым нейм может быть в таблице несколько), причем одну. Соответственно, когда я группирую по 'name' - у меня будет только один результат - хоть с LIMIT 1, хоть без него.<br>
И мне нужен именно тот результат, в котором поле 'score' - наибольшее. Поэтому и пытаюсь отсортировать по этому полю в порядке убывания. А mysql сортирует в данном случае "от балды". Т.е. если есть у меня, например, записи со 'score' 1, 2, 3, 4, 5, то они при добавлении/удалении записи сортируются явно не по убыванию.<br>
Насчет MAX('score') - не катит, т.к. максимальное ЭТО поле то он выбирает, а остальные(например `id`) берет вообще не из этой строки, где максимальное score.<br>
Как такое организовать?<br>
С GROUP BY, как я понял, сортировочка тупит...
https://visavi.net/topics/11597/205253
GROUP BY и сортировка SDFri, 16 Jul 2010 03:43:12 +0400Сообщенияhttps://visavi.net/topics/11597/205253Ну тогда в таком случае за разъяснениями к EXPLAIN. <br>
name это что-ли ключ к связной таблице?
https://visavi.net/topics/11597/205240
GROUP BY и сортировка ОлегFri, 16 Jul 2010 02:56:34 +0400Сообщенияhttps://visavi.net/topics/11597/205240я групирую по нейму как по опознавательному идентификатору. ид в данном случае первичный ключ. вопрос исчерпан
https://visavi.net/topics/11597/205238
GROUP BY и сортировка SDFri, 16 Jul 2010 02:51:30 +0400Сообщенияhttps://visavi.net/topics/11597/205238Да и группировка неправильная. Следует по id группировать, как я понял это primary
https://visavi.net/topics/11597/205234
GROUP BY и сортировка ОлегFri, 16 Jul 2010 02:44:41 +0400Сообщенияhttps://visavi.net/topics/11597/205234