我是 SQL 的新手,我有一个包含 ID(问题 ID)和风险区域(risk1、risk2 和 risk3)的表。
+----+-------+------+------+
| id | risk1 | risk2| risk3|
+----+-------+------+------+
| 0 | h | l | h |
| 1 | m | l | l |
| 2 | h | h | h |
| 3 | l | l | h |
+----+-------+------+------+
我的目标是计算各个 ID 的“h”之和。例如,查询应为 id=0 返回“2”,为 id=1 返回“0”,为 id=2 返回“3”,为 id=3 返回“1”。任何建议将不胜感激。
最佳答案
一种方式:
SELECT
id,
IF(COALESCE(risk1, '') = 'h', 1, 0) +
IF(COALESCE(risk2, '') = 'h', 1, 0) +
IF(COALESCE(risk3, '') = 'h', 1, 0) AS h_sum
FROM yourTable
ORDER BY id;
只是为了好玩,这里有更奇特的方法,使用字符串操作:
SELECT
id,
3 - LENGTH(REPLACE(CONCAT(risk1, risk2, risk3), 'h', '')) AS h_sum
FROM yourTable
ORDER BY id;
Demo
要使第二种方法也 NULL
安全,只需使用 COALESCE(risk1, '')
代替 risk1
(以及其他列也一样)。
关于mysql - 计算列和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327726/