mysql - 计算列和总和

标签 mysql sql

我是 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;

enter image description here

Demo

要使第二种方法也 NULL 安全,只需使用 COALESCE(risk1, '') 代替 risk1(以及其他列也一样)。

关于mysql - 计算列和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327726/

相关文章:

mysql - 重新排序用作排序子句的主键列

sql - 在 Oracle 数据库中查找键是否存在的最快方法

mysql - 删除 MySQL 中除重复行之外的所有重复行?

php - 需要 PHP 代码来从数据库中选择大于 5 但不大于 15 的数字(意味着所有大于 5 的数字,不包括 15)?

php - 我想在员工 ID 中插入多个月的工资。现在我只能在一个客户ID中插入一个月的工资

mysql - 为什么阿拉伯字符没有保存到mysql表中?

mysql - Django多个外键多次引用同一个表?

c# - 可以选择但不能插入数据库 mysql C# ASP.NET

mysql - 使用 group by 仅显示顶部汇总结果

c# - 文件未以正确格式下载