2015-03-16 27 views
6

Làm cách nào để đếm các mục nhập không rỗng theo trường/cột? Tôi thấy một số câu trả lời để đếm theo hàng nhưng không thể hack làm thế nào để làm như vậy cho các cột.Nội dung MySQL COUNT NULL theo cột, GROUP theo cột

Input:

╔════╦════════╦════════╦════════╗ 
║ id ║ field1 ║ field2 ║ field3 ║ 
║ 1 ║ do  ║ re  ║ me  ║ 
║ 2 ║ fa  ║  ║ so  ║ 
║ 3 ║ la  ║ te  ║  ║ 
║ 4 ║ da  ║ re  ║  ║ 
╚════╩════════╩════════╩════════╝ 

đầu ra:

id  4 
field1 4 
field2 3 
field3 2 

Tôi đang cố gắng để có được một thước đo về việc sử dụng trường trong một cơ sở dữ liệu rất bẩn Tôi di chuyển. Có khoảng 50 cột trong cơ sở dữ liệu này vì vậy tôi đang tìm cách tiếp cận không liên quan đến việc gõ từng tên cột.

tôi cũng có thể phải mở rộng tìm kiếm đó để phi NULL & là-không-trống & ≠ 0 & ≠ "không" vì mâu thuẫn trong lưu trữ dữ liệu - một số lĩnh vực chưa bao giờ được sử dụng nhưng tính năng tự động điền với "không" .

Câu trả lời này trông gần với những gì tôi cần, nhưng tạo ra một lỗi SQL và tôi không có đủ uy tín để bình luận: Count number of NULL values in each column in SQL

+0

Cập nhật: Tôi đang sử dụng MySQL không SQL nếu mà làm cho một sự khác biệt. – Slam

Trả lời

3

Chỉ cần sử dụng count():

select count(field1), count(field2), count(field3) 
from table t; 

Đó là những gì count() làm - - nó đếm các giá trị không NULL.

Nếu bạn có ác cảm khi nhập tên, hãy sử dụng bảng siêu dữ liệu (thường là information_schema.columns) để lấy tên cột. Bạn có thể tạo SQL dưới dạng truy vấn hoặc sao chép tên cột vào bảng tính để tạo mã.

EDIT:

Bạn có thể tạo ra các mã sử dụng:

select group_concat('count(', column_name, ')' separate ', ') 
from information_schema.columns 
where table_name = <whatever> and table_schema = <whatever2>; 

Note này sử dụng ít khả năng được biết đến của group_concat() để có nhiều đối số chuỗi.

+0

IS IT .. tôi chỉ học được những điều mới .. – sumit

+0

nhưng khi tôi đã thử nó đang đếm dữ liệu NULL quá – sumit

+0

@gordon linoff, tôi nghĩ người dùng muốn hàng khôn ngoan dữ liệu, không cột khôn ngoan. –

2
SELECT count(field1) as cnt ,'field1' as field from tbl where field1 IS NOT NULL 
UNION all 
SELECT count(field2) as cnt ,'field2' as field from tbl where field2 IS NOT NULL 
union all 
SELECT count(field3) as cnt ,'field3' as field from tbl where field3 IS NOT NULL 

nếu chỉ có 3 CỐ ĐỊNH LĨNH VỰC TRÊN SQL sẽ làm việc

+2

Sử dụng công đoàn tất cả thay vì –

+1

Có khoảng 50 trường. Điều này sẽ làm việc nếu tôi muốn loại tất cả chúng ra. – Slam

+0

Bạn không thực sự cần 'UNION ALL' trừ khi một số tên cột giống nhau, điều này là không thể. –

0

Đây là sqlfiddle

SELECT 
    COUNT(id), 
    SUM(CASE WHEN field1 IS NOT NULL THEN 1 ELSE 0 END), 
    SUM(CASE WHEN field2 IS NOT NULL THEN 1 ELSE 0 END), 
    SUM(CASE WHEN field3 IS NOT NULL THEN 1 ELSE 0 END) 
FROM table1; 
Các vấn đề liên quan