计算每行填充列的百分比

时间:2015-11-09 10:29:04

标签: mysql

我正在尝试计算每行的填充列数。例如,Perc列是我想要计算的值。

id   Col1   Col2  Col3  Perc 
1    NULL   1     2     75%   #3 out of 4
2    2      NULL  NULL  50%   #2 out of 4  
3    NULL   NUll  NULL  25%   #1 out of 4
4    a      Yes   No    100%  #4 out of 4

我读了count number of Null variables per row mysql,提供了一个可能的解决方案。但是在我的情况下,列名和数字经常变化。所以我想要一个更健壮的查询,每次名称或列数更改时都不需要更改。

1 个答案:

答案 0 :(得分:1)

考虑以下内容......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL
,item_id INT NOT NULL
,value VARCHAR(12) NULL
,PRIMARY KEY(id,item_id)
);

INSERT INTO my_table VALUES
(1,1,NULL),
(1,2,'1'),
(1,3,'2'),
(2,1,'2'),
(2,2,NULL),
(2,3,NULL),
(3,1,NULL),
(3,2,NULL),
(3,3,NULL),
(4,1,'a'),
(4,2,'Yes'),
(4,3,'No');

SELECT * FROM my_table;
+----+---------+-------+
| id | item_id | value |
+----+---------+-------+
|  1 |       1 | NULL  |
|  1 |       2 | 1     |
|  1 |       3 | 2     |
|  2 |       1 | 2     |
|  2 |       2 | NULL  |
|  2 |       3 | NULL  |
|  3 |       1 | NULL  |
|  3 |       2 | NULL  |
|  3 |       3 | NULL  |
|  4 |       1 | a     |
|  4 |       2 | Yes   |
|  4 |       3 | No    |
+----+---------+-------+

SELECT x.id
     , ROUND((COUNT(value)+1)/(COUNT(*)+1)*100,2) pct 
  FROM my_table x 
 GROUP 
    BY id;
+----+--------+
| id | pct    |
+----+--------+
|  1 |  75.00 |
|  2 |  50.00 |
|  3 |  25.00 |
|  4 | 100.00 |
+----+--------+