запросец с группировкой

maxon

Новичок
запросец с группировкой

имеется таблица:

+--------+-------+
| a | b |
+--------+-------+
| 11 | 1 |
| 11 | 4 |
| 11 | 5 |
| 15 | 1 |
| 15 | 4 |
| 17 | 1 |
| 17 | 4 |
+--------+-------+

a - некий признак группы

В результате выборки нужно получить сроки, у которых "b" имеет максимальное значение для своей группы:

+--------+-------+
| a | b |
+--------+-------+
| 11 | 5 |
| 15 | 4 |
| 17 | 4 |
+--------+-------+

Использовал "max(b)" в сочетании с "GROUP BY a", что-то неправильно показывает.
 

EnikeN

Новичок
Другими словами тебе нужно вывести в порядке убывания и нужно ещё чтобы группа [а] не повторялась?
 

maxon

Новичок
Нужно вывести те [a], которые имеют максимальное .
Я делал вот так:
SELECT a, max(b) FROM table GROUP BY a
,но получил строки у которых значения не максимальны.
 

EnikeN

Новичок
Или я туплю, или у тя запрос на изнанку составлен?

Должно быть тогда уж:
SELECT table FROM a, max(b) GROUP BY a
Хотя тебе посоветовали ORDER BY b ..я новичок, поэтому могу нести полную ахинею, но всё таки..
 

maxon

Новичок
SELECT table FROM a, max(b) GROUP BY a

Помойму ты прикалываешься:D Сам понял, что написал?
 

EnikeN

Новичок
не а)

но если рассудить, то после селекта идёт название таблицы, а после фрома идут поля..
 

akd

dive now, work later
Команда форума
EnikeN, давай ты начнешь отвечать после того, как выучишь SQL?
 

EnikeN

Новичок
я могу молчать, мне не трудно!! ;) А вот наездов не люблю..не по мне это как то..
 

bgm

 
maxon
SELECT a, max(b) FROM `table` GROUP BY a
но получил строки у которых значения не максимальны.

Сомневаюсь, что это так... Тестовую таблицу будь любезен, для которой значения при таком запросе не максимальны.
 

vonica

Новичок
bgm
Полностью согласен с тобой, должно работать если таблица не кривая.

На миллион долларов все работает правильно

Вот тебе дамп
[sql]
CREATE TABLE `table` (
`a` int(3) NOT NULL default '0',
`b` int(3) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


INSERT INTO `table` VALUES (11, 1);
INSERT INTO `table` VALUES (11, 4);
INSERT INTO `table` VALUES (11, 5);
INSERT INTO `table` VALUES (15, 1);
INSERT INTO `table` VALUES (15, 4);
INSERT INTO `table` VALUES (17, 1);
INSERT INTO `table` VALUES (17, 4);
[/sql]
 

maxon

Новичок
В первую таблицу забыл добавить столбец с идентификаторами. Будет так:

+--------+-------+
| id | a | b |
+--------+-------+
| 1 |11 | 1 |
| 2 |11 | 4 |
| 3 |11 | 5 |
| 4 |15 | 1 |
| 5 |15 | 4 |
| 6 |17 | 1 |
| 7 |17 | 4 |
+--------+-------+

Если выполнить вышеуказанный запрос, то получаю:

+--------+-------+
| id | a | b |
+--------+-------+
| 1 |11 | 5 |
| 4 |15 | 4 |
| 6 |17 | 5 |
+--------+-------+

Сие верно, но не соответствует моим требованиям, поскольку строка [id]=1 в исходной таблице имеет поле =1, а в результате у нас [id]=1 соответствует =5.
Мне важно получить имено верные [id], т.е. в требуется такой результат:
+--------+-------+
| id | a | b |
+--------+-------+
| 3 |11 | 5 |
| 5 |15 | 4 |
| 7 |17 | 5 |
+--------+-------+

Я так понимаю, что GROUP-ом я этого не добьюсь...
 

bkonst

.. хочется странного?...
Я подозреваю (сегодня я весь день подрабатываю телепатом), что настоящая таблица, кроме полей a и b, включает в себя что-нибудь еще (например - первичный ключ). Для такого запроса выбранные значения ключа не будут показывать на строки, где 'b' максимально, что и смущает maxon.

Или кривые руки.

~

О, я-таки телепат.
maxon, используй подзапрос.
 

maxon

Новичок
Спасибо, за понимание! Как именно его использовать, нельзя ли поподробней.
 

vonica

Новичок
Структуру такой таблицы нужно пересмотреть, неудоьная какаято, а для чего нужны эти поля, a b id, что в них храниться?
 

bkonst

.. хочется странного?...
Вполне стандартная структура. См. тот же пример: товар (идентификатор)/производитель (идентификатор)/цена. Проще некуда.
 
Сверху