2010-08-02 50 views
5

Làm cách nào để tính giá trị null trong khi thực hiện truy vấn thẻ chéo?Đếm các giá trị Null trong MYSQL

Tôi có một bảng với ba colums [id, tên, câu trả lời]

tôi có hồ sơ sau đây:

ID NAME ANS 
1 ABC 1 
1 ABC 0 
1 ABC NULL 
2 XYZ 1 
2 XYZ NULL 
2 XYZ NULL 
2 XYZ 1 
2 XYZ 0 
1 ABC 0 

bây giờ tôi muốn có được kết quả của tôi:

ID Name NULLCOUNT  TRUE COUNT FALSE COUNT 
1 ABC 1    1   2 
2 XYZ 2    2   1 

Tôi đang sử dụng Tuyên bố SQL sau:

select ID, NAME, 
    sum(case ANS when null then 1 else 0 end) as NULLCOUNT, 
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT, 
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT 
from 
    TBL1 
Group By ID, Name 

Nhận kết quả của tôi:

ID Name NULLCOUNT  TRUE COUNT FALSE COUNT 
1 ABC 0    1   2 
2 XYZ 0    2   1 

Số NULL đang gặp lỗi. Tại sao và làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

7

Tôi tin rằng thay vì điều này:

sum(case ANS when null then 1 else 0 end) as NULLCOUNT 

Bạn nên sử dụng này:

sum(case when ANS is null then 1 else 0 end) as NULLCOUNT 
+0

thnx nó đã hoạt động nhưng muốn hỏi lý do tại sao nó khác với tiền thật và tiền thưởng. Chẳng phải nó cũng giống như vậy cho truecount và falsecount sao? Điều nào là đúng cho những người khác còn lại quá – KoolKabin

+0

null giống như không xác định. Không xác định! = Không xác định. – foret

+0

@KoolKabin: vì bạn đang so sánh hoàn toàn ANS và NULL trong cấu trúc 'case'. Tuy nhiên, NULL không bằng bất cứ điều gì, thậm chí không chính nó: 'NULL! = NULL' (đánh giá là đúng). Bạn cần sử dụng cấu trúc "IS NULL" đặc biệt: 'NULL IS NULL' (đánh giá là đúng). Tricky, vâng. Hữu ích, cũng có. – Piskvor

1

null -> là null?

+0

Tôi có thể sử dụng nó như thế nào trong giải pháp của mình. plz giải thích – KoolKabin

+0

Nó lặp lại câu trả lời của dcp. Có vẻ như chúng tôi đã viết nó gần như đồng thời. – foret

1

NULL thậm chí không so sánh với chính nó, bạn có thể sử dụng "CASE WHEN ANS là NULL" (bạn cũng thiếu GROUP BY). Hoặc thử:

select ID, NAME, 
    sum(if(ans IS NULL, 1, 0)) as NULLCOUNT, 
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT, 
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT 
from 
    TBL1 
group by ID,NAME 
+0

xin lỗi vì thiếu nó trong câu hỏi nhưng trong thực tế tôi đã sử dụng nó trong truy vấn của tôi. tôi sẽ chỉnh sửa nó trong câu hỏi của tôi quá .. thnx cho gợi ý – KoolKabin

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