2014-02-11 2 views
1

Мне нужно получить нижние значения N из таблицы с учетом того, что вставляются несколько категорий или типов.bottom N из нескольких возможных групп

мой стол:

CREATE TABLE `Table1` (
    `name` VARCHAR(250) NOT NULL, 
    `total` INT(11) NOT NULL, 
    `type` INT(11) NOT NULL 
) 
ENGINE=InnoDB; 

Некоторые значения:

|| *name*  || *total* || *type* || 

|| Clock  || 12  || 103  || 

|| Brief Case || 21  || 103  || 

|| Pencil  || 34  || 103  || 

|| Lollypop  || 45  || 103  || 

|| Notebook  || 67  || 142  || 

|| Rubber Band || 3  || 143  || 

|| Smartphone || 1  || 143  || 

Что я получил до сих пор:

SELECT name,total from Table1 ORDER BY TOTAL ASC LIMIT 3 where type=143; 

, но мне нужно одног e для каждой категории с одним запросом.

Пробовал так:

SELECT name,total from Table1 ORDER BY TOTAL ASC LIMIT 3 GROUP BY type; 

, но это неправильно. Как и ожидалось, я получаю всего 3 записи из всех записей вместо 3 из каждой категории.

[можно дублировать] Mysql selecting (n) rows of each occurrance

+0

Я не думаю, что это возможно сделать с одним MySQL Query, за исключением, если вы знаете все типы заранее (то вы можете сделать длинный и уродливый СОЮЗ всех из них) – Ashalynd

ответ

0

Попробуйте это:

SELECT name,total from Table1 as t1 
WHERE t1.name in (SELECT t2.name FROM Table1 as t2 WHERE t1.type = t2.type ORDER BY t2.TOTAL ASC LIMIT 3) 
Смежные вопросы