2015-08-18 5 views
0

Привет У меня есть следующая MySQL таблица:Выберите мин значения каждого элемента в MySQL

id  item   value 
1   A    11 
2   A    20 
3   B    2 
4   C    1 
5   B    14 
6   C    12 

То, что я пытаюсь сделать, это выбрать элементы с самыми низкими значениями - то, что я пытался сделать на основе поиска этот форум должен использовать следующий запрос:

SELECT *, 
     MIN(value) 
    FROM mytable 
GROUP BY item 

ожидаемый результат должен быть А => 11, в => 2; C => 1 однако для некоторых элементов минимальное значение верно, а для некоторых других элементов значение min - другое значение. Обратите внимание, что таблица состоит из примерно 100 строк.

+2

Что такое тип данных 'значение'? –

+0

Вам нужен «id» в результате? – Mureinik

+1

Возможный дубликат [MySQL MIN/MAX, возвращающий правильное значение, но не соответствующую информацию о записи] (http://stackoverflow.com/questions/5072710/mysql-min-max-returning-proper-value-but-not-the -related-record-info) – Strawberry

ответ

1

Вы можете попробовать этот путь.

SELECT t.* FROM mytable t 
JOIN 
(SELECT item, MIN(value) minVal 
    FROM mytable GROUP BY item 
) t2 
ON t.value = t2.minVal AND t.item = t2.item; 
1

это будет работать в оракула

SELECT item, min(value) 
FROM mytable 
GROUP BY item 
+0

Хорошо, но когда я добавил id к этому; id не соответствует идентификатору строки с наименьшим значением item + ... значение INT, но может быть одинаковым для нескольких элементов. Можем ли мы улучшить это, чтобы получить идентификатор наименьшего значения с видимым элементом? – tsztokma

0
select * 
from mytable t1 
inner join 
(
    select min(value) value, id 
    from mytable 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.value= t2.value 
+0

Маловероятно, что вы захотите вернуть все столбцы. – Strawberry

0

Если вам нужна вся информация мин (значение) для каждого элемента и типа данных столбца «Значение» является INT, а затем запустить следующий запрос,

select * from mytable 
where (item,value) in 
(
    SELECT item, min(value) 
    FROM mytable 
    GROUP BY item 
) 

Пожалуйста см SQL fiddle

+0

Обратите внимание, что в этом случае используется зависимый подзапрос, что означает, что производительность может быть низкой. – Strawberry

Смежные вопросы