Всем привет. Есть таблица с данными, пример: id | type | percent 1 | micro | 80 2 | micro | 92 3 | big | 60 4 | min | 100 5 | big | 70 Мне необходимо вывести по 1 строке одного типа с сортировкой по полю percent, т.е должно получится так: id | type | percent 4 | min | 100 2 | micro | 92 5 | big | 70 С сортировкой все понятно, все беда с исключением дублей по полю type...
Если брать дистинкт, то можно будет указать только одно поле. Как в таком случае получить значения и других полей?
Для подобных выборок есть группировка. Типа: Код (Text): SELECT type, MAX(percent) AS percent FROM mytable GROUP BY type При группировке во фразе SELECT должны быть только поля из GROUP BY и агрегаты от других полей. Нельзя просто взять и подставить сюда еще id! Даже если не будет сообщения об ошибке, получишь не то, что ожидаешь. Но можно результат группировки объединить с той же таблицей и получить все поля: Код (Text): SELECT t2.* FROM (SELECT type, MAX(percent) AS percent FROM mytable GROUP BY type) AS t1 JOIN mytable AS t2 USING(type, percent) Другой вариант: объединение с собой с необычным условием объединения: Код (Text): SELECT t1.id, t1.type, t1.percent FROM mytable AS t1 LEFT JOIN mytable AS t2 ON t1.type=t2.type AND t1.percent < t2. percent WHERE t2.id IS NULL
artoodetoo, большое спасибо, ваш пример очень помог, задача выполнена. Не поможете еще с одним вопросом. Для примера подойдет та же таблица выше. Задача сделать выборочную сортировку по типу (т.е. по полю type) Если использовать "ORDER BY type,percent" то сортировка выполнится корректно, т.е. сначала данные отсортируются по type а потом по percent, однако будет выполнятся алфавитная сортировка. Есть ли возможность вручную указать порядок типов, например: micro, big, min. То есть сначала отберутся поля micro, потом big и потом min.
Ganzal, спасибо. Нашел необходимую информацию с помощью вашего запроса. Помогла следующая конструкция: Код (PHP): SQL> SELECT * FROM CUSTOMERS ORDER BY (CASE ADDRESS WHEN 'DELHI' THEN 1 WHEN 'BHOPAL' THEN 2 WHEN 'KOTA' THEN 3 WHEN 'AHMADABAD' THEN 4 WHEN 'MP' THEN 5 ELSE 100 END) ASC, ADDRESS DESC; PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]