2015-07-22 2 views
0

У меня есть таблица данных, и я хочу, чтобы иметь возможность выводить все данные, которые не повторяет содержимое двух столбцов, иллюстрация:Группировка по нескольким столбцам с одинаковым приоритетом в MySQL

Пример таблицы :

Column1 | Column2 | Column3 
    1   XX  pop 
    2   YY  yif 
    3   ZZ  pop 
    4   PP  pop 
    5   XX  pop 
    6   YY  yif 
    7   PP  Hor 
    8   MM  tre 
    9   PP  pop 
    10   XX  pop 
    11   MM  pop 

то, что я хочу сделать здесь выводятся все строки, где значения оба графах 2 и 3 не повторяются, так что вы будете видеть, что Column1 == 1 и Column1 == 5 есть одинаковые значения как в Column2, так и в Column3, поэтому их нужно выводить только там, где Column1 == 1 и not = 5 (или = 10).

Я хотел бы задать запрос для вывода всех строк, кроме случаев, когда Column1 == 5,6,9,10, потому что они имеют как Column2иColumn3 повторения.

Предназначенный выход запроса: (примечание: все три колонки требуется)

Column1 | Column2 | Column3 
    1   XX  pop 
    2   YY  yif 
    3   ZZ  pop 
    4   PP  pop 
    7   PP  Hor 
    8   MM  tre 
    11   MM  pop 

Я пытался смотреть в Group By, но это возможно только в группе на один столбец, или по крайней мере групп их слева направо, так что GROUP BY (Column2, Column3) будет GROUP BY все значения в Column2, а затем значения в Column3 вместо того, чтобы рассматривать оба столбца одинаково.

Я нашел одно возможное решение, которое было заранее Concat колонны, такие как

GROUP BY CONCAT(Column2, '_', Column3) 

От Is it possible to GROUP BY multiple columns using MySQL?, но это было туманно критике (по крайней мере, в качестве ответа на этот вопрос), но, кажется, ближе всего код, который я видел, чтобы делать то, что хочу.

  • Итак, как должен я структурировать положение GROUP BY, чтобы достичь этого результата?

  • Является ли GROUP BY CONCAT Я нашел хороший способ приблизиться к этому?

ответ

2

GROUP BY Возможно использование нескольких столбцов. В зависимости от результата, который вы хотите, вы должны применить дополнительные функции GROUP к остальной части ваших данных. В вашем случае это выглядит, как вы хотите, первый COLUMN1 индекс и уникальные комбинации из (COLUMN2, колонка3)

Следующий запрос должен сделать трюк:

SELECT MIN(column1) AS column1,column2,column3 
FROM table1 
GROUP BY column2,column3 
ORDER BY MIN(column1) ASC; 
+0

Тестирование этого кода SQL, похоже, возвращает то, что я ищу, спасибо. Не могли бы вы немного объяснить, как «SELECT MIN (column1) AS column1, column2, column3» влияет на «GROUP BY», я не очень понимаю этот синтаксис. Спасибо – Martin

+1

Я думаю, что select Min просто дает самый низкий идентификатор для этой комбинации столбцов 2 и 3 – Moylin

0

Если вы не заботиться о колонке 1 вообще, вам даже не нужно GROUP BY.Просто используйте DISTINCT

SELECT DISTINCT Column2, Column3 
FROM the_table 
ORDER BY however_you_want 
; 

В противном случае, ответ Норберта, вероятно, более подходящим.

+0

спасибо, но из всех столбцов Column1 был самым требовательным! – Martin

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