首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询,如何对某些字段执行sum(),但如果其中一个字段的sum()中的值为空,则返回到'NA‘

问SQL查询,如何对某些字段执行sum(),但如果其中一个字段的sum()中的值为空,则返回到'NA‘
EN

Stack Overflow用户
提问于 2020-02-12 22:27:57
回答 2查看 182关注 0票数 0

我们使用mysql。在SQL查询中的某个位置,我必须将一个字段计算为其他值的总和,但同时要考虑到,如果要求和的其中一个值的值为null,则计算出的值也不是sum(),而是null。

(为了简单起见,我说回退条件值为空,但在任何情况下,都是某个固定值)。

如何将额外的回退条件集成到mysql中的sum()函数中?数据示例如下:

代码语言:javascript
复制
id  value  some_fk
1   1      AL
2   3      AL
3   jak    AL
4   7      AL
5   6      AL

如果我把它们加起来,就像这样:

代码语言:javascript
复制
select sum(value) from tmp;

,我想要返回值'not the‘,因为在其中一行中有一个值'jak’,它不能与其他行相加。

EN

回答 2

Stack Overflow用户

发布于 2020-02-12 22:59:59

你在找IFNULL()吗?

样本数据

代码语言:javascript
复制
CREATE TABLE SAMPLE(ID INT, SAL INT);
INSERT INTO SAMPLE VALUES(1,1000);
INSERT INTO SAMPLE VALUES(1,2000);
INSERT INTO SAMPLE VALUES(2,'3000');
INSERT INTO SAMPLE VALUES(2,'1000');
INSERT INTO SAMPLE VALUES(3,NULL);
---------NEW SAMPLE BASED ON COMMENT---------
INSERT INTO SAMPLE VALUES(3,NULL);
INSERT INTO SAMPLE VALUES(3,'MYTEXT');
INSERT INTO SAMPLE VALUES(3,500);
INSERT INTO SAMPLE VALUES(4,'MYTEXT2');
INSERT INTO SAMPLE VALUES(4,'MYTEXT3');
INSERT INTO SAMPLE VALUES(4,10.2);
INSERT INTO SAMPLE VALUES(5,NULL);
INSERT INTO SAMPLE VALUES(5,NULL);

如果我理解正确的话,对于上面的数据,您期望得到如下所示的结果。

代码语言:javascript
复制
+----+------------+
| ID | SUM_RESULT |
+----+------------+
| 1  | 3000       |
+----+------------+
| 2  | 4000       |
+----+------------+
| 3  | N/A        |
+----+------------+

在这种情况下,您可以使用

代码语言:javascript
复制
SELECT ID,
       IFNULL(SUM(SAL),'N/A') AS SUM_RESULT 
FROM SAMPLE GROUP BY ID

根据评论进行更新:

如果您希望在组包含某些文本时显示错误消息,则可以使用下面的查询。

代码语言:javascript
复制
select ID,
       CASE WHEN 
            MAX(CASE WHEN SAL REGEXP ('^[0-9]+$') THEN SAL ELSE 'N/A' END) !='N/A' 
            THEN
                SUM(SAL)
       ELSE 'NOT SUMMABLE' END AS MYRESULT
FROM SAMPLE
GROUP BY ID

输出

代码语言:javascript
复制
+----+--------------+
| ID |   MYRESULT   |
+----+--------------+
|  1 | 3000         |
|  2 | 4200         |
|  3 | NOT SUMMABLE |
|  4 | NOT SUMMABLE |
|  5 | NOT SUMMABLE |
+----+--------------+

CHECK DEMO HERE

票数 1
EN

Stack Overflow用户

发布于 2020-02-13 01:05:48

您可以使用以下CASE表达式完成此操作:

代码语言:javascript
复制
select 
  case 
    when exists (
      select 1 from tmp
      where value is null or concat(value + 0) <> value
    ) then null
    else (select sum(value) from tmp)  
  end result

EXISTS检查无效的整数值和空值,如果找到则返回null。

ELSE部分安全地返回总和。

请参阅简化的demo。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60190581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档