2010-07-26 37 views
5

Tôi có một bảng có cột cho phép null. Nếu giá trị là null thì nó không đầy đủ. Tôi muốn tính toán phần trăm hoàn thành.Nhận phần trăm các cột đã hoàn thành bằng cách tính giá trị null

Điều này có thể được thực hiện trong MySQL thông qua SQL hay tôi sẽ nhận được tổng số mục nhập và tổng số mục nhập rỗng và tính phần trăm trên máy chủ?

Dù bằng cách nào, tôi rất bối rối về cách tôi cần phải đi về tách biến_value để tôi có thể nhận được tổng số kết quả của nó và cũng có tổng số kết quả NULL của nó.

SELECT 
    games.id 
FROM 
    games 
WHERE 
    games.category_id='10' AND games.variable_value IS NULL 

Điều này mang lại cho tôi tất cả các trò chơi mà biến_ giá trị là NULL. Làm thế nào để tôi mở rộng này cũng có được cho tôi hoặc TOTAL trò chơi hoặc trò chơi NOT NULL cùng với nó?

Bảng Schema:

id (INT Tiểu Auto-Inc)

category_id (INT)

variable_value (TEXT Allow Null Mặc định: NULL)

+0

Bạn có thể cho chúng ta những schema bảng? – JNK

Trả lời

11

Khi bạn sử dụng "Tính" với một tên cột, giá trị null không được bao gồm. Vì vậy, để lấy số liệu hoặc phần trăm không phải là null chỉ làm điều này ...

SELECT 
    count(1) as TotalAll, 
    count(variable_value) as TotalNotNull, 
    count(1) - count(variable_value) as TotalNull, 
    100.0 * count(variable_value)/count(1) as PercentNotNull 
FROM 
    games 
WHERE 
    category_id = '10' 
+2

+1: Đó cũng là ý tưởng của tôi - cột được tính toán, chia số tiền cho số lượng các trường hợp không null. Tôi đã suy nghĩ 'SUM (COALESCE (giá trị, 0)/COUNT (...)' bản thân mình ... –

+0

chỉnh sửa: Đã thêm các tùy chọn "tổng cộng" khác. –

5
SELECT 
    SUM(CASE WHEN G.variable_value IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*) AS pct_complete 
FROM 
    Games G 
WHERE 
    G.category_id = '10' 

Bạn có thể cần phải làm một số đúc trên SUM() để bạn có được một số thập phân.

+0

+1: Xem bình luận của tôi với Carter –

+0

Vâng, tôi đã cho anh ta một +1 quá.Tôi thích rằng uẩn hơn NULL có thể dẫn đến mã súc tích hơn, mặc dù theo mặc định khi tôi bắt đầu gõ tôi đi cho tiết :) –

2

để đếm số lượng các mục phù hợp với tuyên bố ĐÂU của bạn, sử dụng COUNT(*)

SELECT COUNT(*) AS c FROM games WHERE games.variable_value IS NULL 

Nếu bạn muốn cả hai tổng số hàng và những người có variable_value là NULL trong một tuyên bố, thử GROUP BY

SELECT COUNT(variable_value IS NULL) AS c, (variable_value IS NULL) AS isnull FROM games GROUP BY isnull 

Returns cái gì đó như

c | isnull 
============== 
12 | 1 
193 | 0 

==> 12 entries có NULL trong cột đó, 193 havn't

==> chiếm tỷ lệ: 12/(12 + 193)

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