SQL phân biệt cho 2 trường trong cơ sở dữ liệu


84

Bạn có thể nhận được sự kết hợp riêng biệt của 2 trường khác nhau trong một bảng cơ sở dữ liệu không? nếu vậy, bạn có thể cung cấp ví dụ về SQL.

Câu trả lời:


128

Làm thế nào về đơn giản:

select distinct c1, c2 from t

hoặc là

select c1, c2, count(*)
from t
group by c1, c2

Tùy thuộc vào dữ liệu, nhóm theo chậm hơn so với riêng biệt
noizer

5
Đối với những người gặp Operand should contain 1 column(s)lỗi, vấn đề của bạn là có thể bạn đang làm select distinct(c1, c2) from tvà bạn không được phép sử dụng dấu ngoặc ở đây. Đó là cách tôi đến đây.
BookOfGreg

16

Nếu bạn chỉ muốn các giá trị riêng biệt từ hai trường, cộng với việc trả lại các trường khác cùng với chúng, thì các trường khác phải có một số loại tổng hợp trên chúng (tổng, tối thiểu, tối đa, v.v.) và hai cột bạn muốn phân biệt phải xuất hiện trong nhóm theo mệnh đề. Nếu không, nó giống như Decker nói.


7

Bạn có thể nhận được kết quả phân biệt bằng hai cột sử dụng SQL bên dưới:

SELECT COUNT(*) FROM (SELECT DISTINCT c1, c2 FROM [TableEntity]) TE

5

Nếu bạn vẫn muốn chỉ nhóm theo một cột (như tôi muốn), bạn có thể lồng truy vấn:

select c1, count(*) from (select distinct c1, c2 from t) group by c1

3

Chia sẻ suy nghĩ ngu ngốc của tôi:

Có lẽ tôi chỉ có thể chọn phân biệt trên c1 mà không phải trên c2, vì vậy cú pháp có thể là select ([distinct] col)+đâu distinctlà định nghĩa cho mỗi cột.

Nhưng sau khi suy nghĩ, tôi thấy rằng sự khác biệt chỉ trên một cột là vô nghĩa . Hãy quan hệ sau:

   | A | B
__________
  1| 1 | 2
  2| 1 | 1

Nếu chúng ta select (distinct A), B, thì điều gì là thích hợp BchoA = 1 ?

Vì vậy, distinctlà một điều kiện cho a statement.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.