我有两张桌子。一个是如下所示
表a
ID, count 1, 123 2, 123 3, 123
表b
ID, count
表b是空的
使用时
SELECT CASE WHEN isnotnull(max(b.count)) THEN max(a.count) + max(b.count) ELSE max(a.count) FROM a, b
唯一的结果总是空的,我很困惑。为什么?
使用coalesce()
函数和显式连接,避免使用分隔表名类型的旧连接方法
select coalesce(max(a.count)+max(b.count),max(a.count))
from a left join b on a.id=b.id
由于表b
为空,max(b.count)
将返回NULL
。任何使用NULL的操作都会导致NULL
。
所以,max(a.count)max(b.count)
为空<代码>(这是123 NULL,将始终为NULL)。因此,您的查询返回NULL。
只要使用coalesce
在出现NULL时分配一个默认值。
您不需要使用连接
,两个子查询的简单的和
将得到您想要的结果。因为只有当它不为空时,才添加MAX(b.count)
,所以我们可以一直添加它,但当它为空时,合并为0。
SELECT COALESCE((SELECT MAX(count) FROM b), 0) + (SELECT MAX(count) FROM a)
另一种实现此功能的方法是
值:UNION
从每个表中计数
SELECT COALESCE(MAX(bcount), 0) + MAX(acount)
FROM (SELECT count AS acount, NULL AS bcount FROM a
UNION
SELECT NULL AS acount, count AS bcount FROM b) u
请注意,如果使用JOIN
,则必须是FULL JOIN
。如果使用LEFT JOIN
,则有可能看不到表b中的所有值。例如,考虑表b有一个条目的情况:ID=4,count=456
。ID
上的LEFT JOIN
将不会在结果表中包含此值(因为表a只有1,2和3的ID值),因此您将得到错误的结果:
CREATE TABLE a (ID INT, count INT);
INSERT INTO a VALUES (1, 123), (2, 123), (3, 123);
CREATE TABLE b (ID INT, count INT);
INSERT INTO b VALUES (4, 456);
SELECT COALESCE(MAX(b.count), 0) + MAX(a.count)
FROM a
LEFT JOIN b ON a.ID = b.ID
输出
123 (should be 579)
要使用FULL JOIN
,您将编写
SELECT COALESCE(MAX(b.count), 0) + MAX(a.count)
FROM a
FULL JOIN b ON a.ID = b.ID
问题内容: 使用该函数时是否可以进行不区分大小写的比较? 因此,使用这样的源数组: 以下查找将全部返回true: 哪些功能或一组功能可以做到相同?我认为本身无法做到这一点。 问题答案: 您可以使用:
函数名称:小写字母转大写 函数功能:将所有小写字母转成大写 函数方法 str2 = string.upper(str1) 参数 类型 必填 说明 str1 string 是 需要转换的内容 返回值 类型 说明 str2 string 转换后的内容 函数用例 str1 = "just do it" str2 = string.upper(str1) dialog("转换后的大写字母内容:"..str
函数名称:大写字母转成小写 函数功能:将所有大写字母转成小写 函数方法 str2 = string.lower(str1) 参数 类型 必填 说明 str1 string 是 需要转换的内容 返回值 类型 说明 str2 string 转换成大写后的内容 函数用例 str1="JUST DO IT" str2 = string.lower(str1) dialog("转换后的内容:"..str2,
问题内容: 我只是有一个想法可以测试一些东西,并且有效: 输出显然是: 所以我的问题是: 这是好是坏的编码风格? 这有什么好处? 最重要的是,是否可以在声明本身中创建这样的构造? 另外…为什么甚至有可能做? 问题答案: 这是好是坏的编码风格? 像任何东西一样,这取决于情况。在某些情况下, 锯齿状数组 (称为它们)实际上是适当的。 这有什么好处? 好吧,用于将不同长度的数据集存储在一个数组中。例如,
问题内容: 由于我有多个案件应该以相同的方式处理,因此我尝试: 但是我得到一个编译器错误。 在Java中,我是否应该逐个调用相同的函数: 有没有更简单的风格? 问题答案: 您必须为每个String 使用关键字,如下所示: 编辑02/05/2019 Java 12 从Java 12开始,提出了新的switch case语法,因此要解决此问题,方法如下: 现在,您可以选择多个选项,并用逗号分隔,一个箭
问题内容: 我正在研究一些代码,并找到了对的调用。PHP对函数名称是否区分大小写?我记得在某处读过这篇文章,但似乎找不到任何参考。 问题答案: 我在此引用: 注意:函数名称不区分大小写,尽管调用函数通常是一种很好的形式,因为它们出现在声明中。 因此,它看起来像用户定义的函数是不区分大小写,有一个投票下PHP5区分大小写制作功能/对象。