2009-08-25 37 views
42

Cân nhắccặp biệt các giá trị SQL

create table pairs (number a, number b) 

Trong trường hợp dữ liệu là

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

vv

truy vấn gì mang lại cho tôi những giá trị khác biệt cột số b có Vì vậy, tôi có thể thấy

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

chỉ

Tôi đã thử

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

nhưng mang lại cho tôi "không phải là một nhóm bởi khái niệm"

Trả lời

56

gì bạn có nghĩa là một trong hai

SELECT DISTINCT a, b FROM pairs; 

hoặc

SELECT a, b FROM pairs GROUP BY a, b; 
+3

Bây giờ tôi nghĩ về nó, nhóm theo từng cột giống như không nhóm theo bất kỳ. Và bạn đã đánh bại tôi trong 30 giây. +1 – JamesMLV

+6

JamesMLV, nhóm theo từng cột không giống như không nhóm theo bất kỳ nếu bạn có hàng trùng lặp. Xem xét đầu ra của 'SELECT a, b, count (*) FROM pair'. –

+0

Oscar bây giờ tôi nhận ra rằng truy vấn của tôi sẽ cung cấp cho bạn thêm cột cho b = 1 (tôi thực sự hiểu sai nó, biết rằng bạn muốn cả hai cột, tôi giả định bạn muốn hàng riêng biệt)… –

9

này sẽ cung cấp cho bạn kết quả mà bạn đưa ra dưới dạng e xample:

SELECT DISTINCT a, b 
FROM pairs 
4

nếu bạn muốn lọc các tuples bạn có thể sử dụng trên đường này:

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

những thứ tốt là bạn không cần phải sử dụng nhóm bằng.

+0

Tôi rất hy vọng về phương pháp này nhưng vẫn gặp phải lỗi "ORA-00907: thiếu dấu ngoặc đơn phải". Các quy tắc cú pháp để sắp xếp các cột theo phương pháp này là gì? – Chris

0

Nếu bạn chỉ muốn một số số của các cặp riêng biệt.

Cách đơn giản nhất để làm điều đó là như sau SELECT COUNT(DISTINCT a,b) FROM pairs

Các giải pháp trước đó sẽ liệt kê tất cả các cặp và sau đó bạn sẽ phải làm một truy vấn thứ hai để đếm chúng.

9

Nếu bạn muốn muốn đối xử với 1,2 và 2,1 là cặp cùng, thì điều này sẽ cung cấp cho bạn danh sách duy nhất trên 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 

Lấy cảm hứng từ @meszias trả lời trên

+0

tất nhiên! Tuy nhiên tôi đã stumped về cách làm điều này trước khi tôi đọc câu trả lời này. cám ơn. – Greg

Các vấn đề liên quan