Как написать этот запрос MySQL?

#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 предложение and MIN 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. Да .. Мне нужно получить не только минимальные значения, но и строку. Спасибо, что попытались, хотя 🙂