我正在尝试计算每行的填充列数。例如,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,提供了一个可能的解决方案。但是在我的情况下,列名和数字经常变化。所以我想要一个更健壮的查询,每次名称或列数更改时都不需要更改。
答案 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 |
+----+--------+