Выбор отдельной комбинации 2 столбцов в mysql
У меня есть таблица mysql, которая выглядит следующим образом:
1 value1 value2 3534
2 value1 value1 8456
3 value1 value2 3566
4 value1 value3 7345
5 value2 value3 6734
Мне нужен запрос, чтобы выбрать все строки с различными столбцами 2 и 3, например, вывод, который я хочу для этого примера, будет выглядеть следующим образом:
1 value1 value2 3534
2 value1 value1 8456
4 value1 value3 7345
5 value2 value3 6734
Я нашел несколько примеров того, как это сделать, но все они выбирают различные по каждому столбцу индивидуально.
6 ответов:
Предполагая, что первый столбец уникален, вы можете сделать следующее:
SELECT id, col2, col3, col4 FROM yourtable WHERE id IN ( SELECT MIN(id) FROM yourtable GROUP BY col2, col3 )
Смотрите, как он работает онлайн: sqlfiddle
Обновление 1
Лучше вам использовать это против выше.
SELECT id, col2, col3, col4 FROM yourtable GROUP BY col2, col3;
Демо
Причина, по которой я говорю, заключается в том, что, используя CONCAT, я не получаю желаемого результата в это дело. Первый запрос возвращает мне 5 строк, однако CONCAT возвращает мне 4 строки, что неверно.
Надеюсь, что вы получили мою точку зрения.
Предположим, что столбцы в таблице являются (id, col2, col3, col4).
SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4 FROM yourtable GROUP BY CONCAT(col2, col3);
Или
SELECT id, col2, col3, MIN(col4) FROM yourtable GROUP BY col2, col3;
Живая работа пример
Предполагая, что столбцы в таблице являются
(id, col1, col2, col3)
, Вы можете:SELECT * FROM YourTable yt JOIN ( SELECT MIN(id) as minid FROM YourTable GROUP BY col1, col2 ) filter ON filter.minid = yt.id
Этот запрос гарантирует, что комбинация column1 и column2 уникальна, при этом выбирается минимальное значение столбца three
SELECT col1, col2, MIN(col3) FROM yourTable GROUP BY col1, col2
Использование метода group by возвращает мне дополнительные строки, где как явная проверка каждого поля, хотя и больше, возвращает то же самое число записей, что и count (Distinct ..)
SELECT id, col2, col3, col4 FROM yourtable yt WHERE id = ( SELECT MIN(id) FROM yourtable yt1 WHERE yt.col2 = yt1.col2 AND yt.col3 = yt1.col3 )