Выбор отдельной комбинации 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 19

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

Самый простой запрос для этого -

SELECT col1, col2, MIN(col3)
FROM myTable
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
)