Различная пара значений SQL

Учитывать

 create table pairs ( number a, number b ) 

Где данные

1,1
1,1
1,1
2,4
2,4
3,2
3,2
5,1

И Т. Д.

Какой запрос дает мне различные значения, которые имеет числовой столбец b, поэтому я могу видеть

1,1
5,1
2,4
3,2

Только

я пробовал

select distinct ( a ) , b from pairs group by b 

но дает мне "не группу по выражению"


person OscarRyz    schedule 25.08.2009    source источник


Ответы (5)


То, что вы имеете в виду, либо

SELECT DISTINCT a, b FROM pairs;

or

SELECT a, b FROM pairs GROUP BY a, b;
person Michael Krelin - hacker    schedule 25.08.2009
comment
Теперь, когда я думаю об этом, группировка по каждому столбцу — это то же самое, что не группировать ни по одному. И ты опередил меня на 30 секунд. +1 - person JamesMLV; 26.08.2009
comment
JamesMLV, группировка по каждому столбцу — это не то же самое, что не группировать ни по одному, если у вас есть повторяющиеся строки. Рассмотрим вывод SELECT a,b,count(*) FROM pairs. - person Michael Krelin - hacker; 26.08.2009
comment
Оскар, теперь я понял, что мой запрос даст вам дополнительный столбец для b = 1 (на самом деле я неправильно его понял, зная, что вам нужны оба столбца, я предположил, что вам нужны разные строки)… - person Michael Krelin - hacker; 26.08.2009
comment
И вот вам еще пара вопросов ;-) - person Michael Krelin - hacker; 26.08.2009
comment
Зависит от того, чего вы хотите. Если вам нужна любая строка, отличная от b, возможно, DISTINCT ON. Если вам нужны просто отдельные строки — одна из первых двух. Если вам нужна какая-то конкретная строка, исходя из каких-то критериев, которые вы можете придумать, то какой-то вариант последней. Тот, который я привел в качестве примера, дает вам разные значения b и минимальные a для каждого. в вашем случае это будет 1,1 для b = 1 (поскольку 1 - это минимум 1 и 5). - person Michael Krelin - hacker; 26.08.2009
comment
Хм... если у вас есть данное значение столбца B, то я сейчас добавлю в список еще один запрос ;-) - person Michael Krelin - hacker; 26.08.2009
comment
Однако, глядя на ваш пример, я думаю, что у вас нет определенного значения для B, поэтому первые два примера — это то, что вам нужно. Вам нужен набор различных пар a, b. Итак, первые два запроса. - person Michael Krelin - hacker; 26.08.2009
comment
Все еще звучит как отдельные пары. Теперь вы можете добавить INSERT INTO pairs VALUES ('SQLand','SQL') - person Michael Krelin - hacker; 26.08.2009
comment
упс, столбцы числовые ;-) - person Michael Krelin - hacker; 26.08.2009
comment
Да, я основывал свой первый ответ (который, как я утверждаю, кажется вам нужным) на здравом смысле. Но потом я внимательно прочитал (какая ошибка!) и заметил, что вы говорите только о DISTINCT b, поэтому я придумал больше возможных решений. Теперь, когда вы объяснили более подробно, он все больше и больше похож на первоначальный ответ (первые два запроса, которые дают вам идентичные результаты, но GROUP BY может быть легко расширен, чтобы дать вам, например, количество раз, которое вы должны были говорить) для каждой пары земля/язык, добавив count(*) ;-)). - person Michael Krelin - hacker; 26.08.2009
comment
Похоже, кто-то удалил его комментарии… ;-) - person Michael Krelin - hacker; 10.11.2011

Если вы хотите рассматривать 1,2 и 2,1 как одну и ту же пару, это даст вам уникальный список в MS-SQL:

SELECT DISTINCT 
    CASE WHEN a > b THEN a ELSE b END as a,
    CASE WHEN a > b THEN b ELSE a END as b
FROM pairs

Вдохновленный ответом @meszias выше

person StuartQ    schedule 14.02.2014
comment
конечно! однако я был в тупике, как это сделать, прежде чем прочитал этот ответ. Спасибо. - person Greg; 26.11.2016

Это даст вам результат, который вы даете в качестве примера:

SELECT DISTINCT a, b
FROM pairs
person Lasse V. Karlsen    schedule 25.08.2009

если вы хотите отфильтровать кортежи, которые вы можете использовать следующим образом:

select distinct (case a > b then (a,b) else (b,a) end) from pairs

хорошо, что вам не нужно использовать group by.

person meszias    schedule 28.01.2012
comment
Я очень надеялся на этот метод, но постоянно сталкивался с ошибкой ORA-00907: отсутствует правая скобка. Каковы правила синтаксиса для сортировки столбцов этим методом? - person Chris; 11.07.2012

Если вам просто нужно количество различных пар.

Самый простой способ сделать это SELECT COUNT(DISTINCT a,b) FROM pairs

Предыдущие решения перечисляли все пары, а затем вам нужно было выполнить второй запрос, чтобы их подсчитать.

person adam    schedule 14.07.2013