#mysql #sql #logic #minimum
#mysql #sql #Логические #минимальный
Вопрос:
Предположим, у меня есть таблица, в которой есть три целочисленных поля и одно строковое поле (просто данные).
Например, это выглядит как:
Id Category Value Data
1 1 3 ...
2 1 4 ...
3 2 2 ...
4 2 4 ...
5 3 5 ...
6 3 6 ...
7 3 2 ...
8 4 1 ...
Что я хочу сделать, так это для каждого Category
включить строку с минимальным Value
полем в результирующий набор. В этом случае он вернул бы:
Id Category Value Data
1 1 3 ...
3 2 2 ...
7 3 2 ...
8 4 1 ...
Как написать такой запрос?
Спасибо!
Комментарии:
1. Что вы уже пробовали? Вы пробовали использовать
GROUP BY
предложение andMIN
clause?2. Однако он также запрашивает идентификаторы, которые GROUP BY и MIN не вернули бы. javic как вы хотите разрешить связи, например, если бы было две строки со значением категории 1 3? Показать их оба? Показать только один из них? Какой?
3. О, вы можете предположить, что случаев привязки не будет. Не будет двух строк с одинаковой категорией И значением. Спасибо.
Ответ №1:
select T1.Id,
T1.Category,
T1.Value,
T1.Data
from YourTable as T1
inner join (
select Category,
min(Value) as Value
from YourTable
group by Category
) as T2
on T1.Category = T2.Category and
T1.Value = T2.Value
Ответ №2:
select *
from mytable t
join (select category, min(value) as value from mytable group by 1) x
on t.value = x.value and t.category = x.category
Внутренний выбор получает категории и значения, необходимые для конечного результата, затем вы снова подключаетесь к основной таблице, чтобы получить все столбцы.
Комментарии:
1. Хорошо, спасибо! Это выглядит идеально. Не уверен в производительности, но я не жажду производительности в этом вопросе.
Ответ №3:
SELECT category, MIN(value) as Value
FROM table
GROUP BY category
Используйте MIN
функцию и GROUP BY
результаты в столбце Категория.
Комментарии:
1. Да .. Мне нужно получить не только минимальные значения, но и строку. Спасибо, что попытались, хотя 🙂