2011-09-26 3 views
5

Thứ nhất, nếu nó có liên quan, tôi đang sử dụng MySQL, mặc dù tôi giả sử một giải pháp sẽ hoạt động trên các sản phẩm DB. Do đó, vấn đề của tôi là:Nhận số giá trị chỉ xuất hiện một lần trong cột

Tôi có một bảng đơn giản với một cột đơn. Không có ràng buộc nào trên cột. Trong cột này, có một số dữ liệu đơn giản, ví dụ:

a 
a 
b 
c 
d 
d 

Tôi cần nhận số/số giá trị chỉ xuất hiện một lần. Từ ví dụ trên sẽ là 2 (vì chỉ có b và c xuất hiện một lần trong cột).

Hy vọng rõ ràng là tôi không muốn giá trị DISTINCT, nhưng giá trị UNIQUE. Tôi đã thực sự làm điều này trước đây, bằng cách tạo ra một bảng bổ sung với một ràng buộc UNIQUE trên cột và chỉ cần INSERTing vào bảng mới từ cái cũ, xử lý các bản sao tương ứng.

Tôi đã hy vọng tìm được giải pháp không yêu cầu bảng tạm thời, và bằng cách nào đó có thể được thực hiện bằng một lệnh SELECT tiện lợi.

+1

L OL tại ba câu trả lời tương tự đồng thời được đăng. – ray

+0

Ah - nhưng ai là tốt nhất;) –

+0

Tại thời điểm này và sau khi đọc lại câu hỏi, tôi thực sự nghĩ rằng Randy hoặc Romain có giải thưởng, nhưng bạn đã có định dạng đẹp hơn tôi @Hugh Jones: D – ray

Trả lời

14

Giả sử bảng của bạn được gọi T và lĩnh vực của bạn được gọi là F:

SELECT COUNT(F) 
FROM (
    SELECT F 
    FROM T 
    GROUP BY F 
    HAVING COUNT(*) = 1 
) AS ONLY_ONCE 
+1

Đối với tiền của tôi - đây là câu trả lời hay nhất. –

+0

Rất cám ơn. Hoạt động hoàn hảo. – BoomShaka

3
select field1, count(field1) from my_table group by field1 having count(field1) = 1 

select count(*) from (select field1, count(field1) from my_table group by field1 having count(field1) = 1) 

đầu tiên sẽ trả về giá trị duy nhất và thứ hai sẽ trả lại số phần tử duy nhất.

3
select count(*) from 
(
    select 
    col1, count(*) 
    from 
    Table 
    group by 
    Col1 
    Having 
    Count(Col1) = 1 
) 
+0

Tôi nghĩ rằng phiên bản mới của tôi là nền tảng độc lập nhất –

3

Nó có thể đơn giản như này:

Select MyColumn From MyTable Group By MyColumn Where Count(MyColumn) = 1 
+0

Cung cấp cho bạn danh sách các giá trị "được biểu diễn duy nhất", chứ không phải số lượng giá trị đã nói (bạn ' d phải xem xét số lượng hồ sơ được trả lại). Tốt tinh thần tổng thể, nhưng thiếu số lượng cấp cao nhất cần thiết để trả lời câu hỏi :) – Romain

+1

@Romain Oh chắc chắn ... technicalities! Chỉ một người trong nhóm không có upvotes. Nó giống như phòng tập thể dục trung học trên một lần nữa. – ray

+1

Tôi hiểu ý bạn là gì ... Do đó, tôi đã chỉ ra rằng câu trả lời của bạn thực sự tốt ... Và tôi đã bỏ phiếu nếu nó đã trả lời câu hỏi ... – Romain

3

chỉ tổ nó một chút ...

select count(cnt) from 
(select count(mycol) cnt from mytab group by mycol) 
where cnt = 1 
+0

Các poster, tôi nghĩ, didnt khá đặt câu hỏi của mình đúng. Câu trả lời này giải quyết một cách giải thích khác với một phần còn lại của chúng ta. –

+1

@Hugh - Tôi không đồng ý. Có vẻ rất rõ ràng với tôi "Tôi cần phải lấy số/đếm các giá trị chỉ xuất hiện một lần. Từ ví dụ trên sẽ là 2" câu trả lời của bạn chỉ đơn giản là sai. Điều này trả về giống như Romain (mặc dù nó thiếu bí danh cho bảng dẫn xuất) –

+1

Có - tôi đọc lại câu hỏi và nó không mơ hồ, tuy nhiên, 'Tôi không muốn các giá trị DISTINCT mà tôi muốn UNIQUE' gửi cho tôi một cách sai. –