我正在尝试计算每行的已填充列数。例如,列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,这提供了可能的解决方案。但是,就我而言,列名和列号经常更改。所以我想要一个更强大的查询,不必每次名称或列数更改时都进行更改。
最佳答案
考虑以下...
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 |
+----+--------+
关于mysql - 计算每行填充列的百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33607124/