当前位置: 首页 > 知识库问答 >
问题:

max函数不具有大小写时子句

龚睿
2023-03-14

我有两张桌子。一个是如下所示

表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

唯一的结果总是空的,我很困惑。为什么?

共有3个答案

祁均
2023-03-14

使用coalesce()函数和显式连接,避免使用分隔表名类型的旧连接方法

  select coalesce(max(a.count)+max(b.count),max(a.count))
  from a left join b on a.id=b.id
左丘成仁
2023-03-14

由于表b为空,max(b.count)将返回NULL。任何使用NULL的操作都会导致NULL

所以,max(a.count)max(b.count)为空<代码>(这是123 NULL,将始终为NULL)。因此,您的查询返回NULL。

只要使用coalesce在出现NULL时分配一个默认值。

刘曾琪
2023-03-14

您不需要使用连接,两个子查询的简单的将得到您想要的结果。因为只有当它不为空时,才添加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=456ID上的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区分大小写制作功能/对象。