我们使用mysql。在SQL查询中的某个位置,我必须将一个字段计算为其他值的总和,但同时要考虑到,如果要求和的其中一个值的值为null,则计算出的值也不是sum(),而是null。
(为了简单起见,我说回退条件值为空,但在任何情况下,都是某个固定值)。
如何将额外的回退条件集成到mysql中的sum()函数中?数据示例如下:
id value some_fk
1 1 AL
2 3 AL
3 jak AL
4 7 AL
5 6 AL如果我把它们加起来,就像这样:
select sum(value) from tmp;,我想要返回值'not the‘,因为在其中一行中有一个值'jak’,它不能与其他行相加。
发布于 2020-02-12 22:59:59
你在找IFNULL()吗?
样本数据
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);如果我理解正确的话,对于上面的数据,您期望得到如下所示的结果。
+----+------------+
| ID | SUM_RESULT |
+----+------------+
| 1 | 3000 |
+----+------------+
| 2 | 4000 |
+----+------------+
| 3 | N/A |
+----+------------+在这种情况下,您可以使用
SELECT ID,
IFNULL(SUM(SAL),'N/A') AS SUM_RESULT
FROM SAMPLE GROUP BY ID根据评论进行更新:
如果您希望在组包含某些文本时显示错误消息,则可以使用下面的查询。
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输出
+----+--------------+
| ID | MYRESULT |
+----+--------------+
| 1 | 3000 |
| 2 | 4200 |
| 3 | NOT SUMMABLE |
| 4 | NOT SUMMABLE |
| 5 | NOT SUMMABLE |
+----+--------------+发布于 2020-02-13 01:05:48
您可以使用以下CASE表达式完成此操作:
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 resultEXISTS检查无效的整数值和空值,如果找到则返回null。
ELSE部分安全地返回总和。
请参阅简化的demo。
https://stackoverflow.com/questions/60190581
复制相似问题