Отличительная пара значений SQL - PullRequest
49 голосов
/ 26 августа 2009

Рассмотрим

 create table pairs ( number a, number b ) 

Где данные

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

Etc.

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

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

только

Я пробовал

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

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

Ответы [ 5 ]

66 голосов
/ 26 августа 2009

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

SELECT DISTINCT a, b FROM pairs;

или

SELECT a, b FROM pairs GROUP BY a, b;
15 голосов
/ 14 февраля 2014

Если вы хотите обрабатывать 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 выше

9 голосов
/ 26 августа 2009

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

SELECT DISTINCT a, b
FROM pairs
4 голосов
/ 29 января 2012

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

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

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

0 голосов
/ 14 июля 2013

Если вы просто хотите считать различных пар.

Самый простой способ сделать это заключается в следующем SELECT COUNT(DISTINCT a,b) FROM pairs

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

...