我正在从表中选择一列的最大值.但是有一个问题:如果表中没有行,则返回null.
我想使用一个函数,如果结果为null,它将返回一个特定的值.例如,对于Oracle,有一个NVL函数在列为空时给出一定的值.MySQL中有相同的功能吗?
我有一个有两行的数据框:
| code | name | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345 | Yemen | NA | 2 | 3 | NA |
| 346 | Yemen | 4 | NA | NA | 5 |
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来合并这两行?如果我在"346"中重命名"345"会更容易吗?
SQL提供了一个函数coalesce(a, b, c, ...),如果它的所有参数都为null,则返回null,否则返回第一个非null参数.
你会如何在Clojure中写这样的东西?
它将被调用如下:(coalesce f1 f2 f3 ...)其中的fi表单只应在需要时进行评估.如果f1是非零,则f2不应评估 - 它可能有副作用.
也许Clojure已经提供了这样的功能(或宏).
编辑:这是我提出的一个解决方案(修改自Stuart Halloway的Programming Clojure,(and ...)第206页的宏):
(defmacro coalesce
([] nil)
([x] x)
([x & rest] `(let [c# ~x] (if c# c# (coalesce ~@rest)))))
Run Code Online (Sandbox Code Playgroud)
似乎工作.
(defmacro coalesce
([] nil)
([x] x)
([x & rest] `(let [c# ~x] (if (not (nil? c#)) c# (coalesce ~@rest)))))
Run Code Online (Sandbox Code Playgroud)
固定.
描述:
我的陈述应该用'no name'替换每个空的 title_column ,但它不会:
SELECT
COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;
Run Code Online (Sandbox Code Playgroud)
IFNULL()的行为方式相同.
我究竟做错了什么 ?
当我这样做时:
select COALESCE (CORP_ID, 0) from crmuser.accounts;
Run Code Online (Sandbox Code Playgroud)
Null的CORP_ID记录返回0但是当我这样做时:
select COALESCE (EMAIL, 'NO EMAIL') from crmuser.accounts
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
ORA-12704: character set mismatch
Run Code Online (Sandbox Code Playgroud)
NVARCHAR2中的EMAIL字段(30).是我的数据类型,如果是,我该怎么做才能返回默认值?
早上好,我亲爱的sql巫师和巫师,
我想要在3个表中替换3列数据.目前我正在使用NVL功能,但是这仅限于两列.
请参阅下面的示例:
SELECT ccc.case_id,
NVL (ccvl.descr, ccc.char)) char_val
FROM case_char ccc, char_value ccvl, lookup_value lval1
WHERE
ccvl.descr(+) = ccc.value
AND ccc.value = lval1.descr (+)
AND ccc.case_id IN ('123'))
case_char table
case_id|char |value
123 |email| work_email
124 |issue| tim_
char_value table
char | descr
work_email | complaint mail
tim_ | timeliness
lookup_value table
descr | descrlong
work_email| xxx@blah.com
Run Code Online (Sandbox Code Playgroud)
基本上就是我想要做的是,如果存在与lookup_value.descr然后显示它case_char.value匹配,如果没有,那么如果存在与case_char.value和char_value.char匹配,则显示它.
我只是试图返回的说明"issue'from的char_value表,但对于'电子邮件’我要回从Lookup_Array中表descrlong(全部属于相同的别名'char_val’).
所以我的问题是,我如何实现这一点,记住我希望它们出现在同一个别名下.
如果您需要任何进一步的信息,请告诉我.
多谢你们
从这个问题,关于使用COALESCE一个整洁的答案来简化复杂的逻辑树.我考虑过短路问题.
例如,在大多数语言的函数中,参数被完全评估,然后传递给函数.在C:
int f(float x, float y) {
return x;
}
f(a, a / b) ; // This will result in an error if b == 0
Run Code Online (Sandbox Code Playgroud)
这似乎不是COALESCESQL Server中"功能" 的限制:
CREATE TABLE Fractions (
Numerator float
,Denominator float
)
INSERT INTO Fractions VALUES (1, 1)
INSERT INTO Fractions VALUES (1, 2)
INSERT INTO Fractions VALUES (1, 3)
INSERT INTO Fractions VALUES (1, 0)
INSERT INTO Fractions VALUES (2, 0)
INSERT INTO Fractions VALUES (3, …Run Code Online (Sandbox Code Playgroud) 我在Spark中有以下代码:
myData.filter(t => t.getMyEnum() == null)
.map(t => t.toString)
.saveAsTextFile("myOutput")
Run Code Online (Sandbox Code Playgroud)
myOutput文件夹中有2000多个文件,但只有少数t.getMyEnum()== null,因此输出记录非常少.由于我不想只搜索2000+输出文件中的几个输出,我尝试使用coalesce组合输出,如下所示:
myData.filter(t => t.getMyEnum() == null)
.map(t => t.toString)
.coalesce(1, false)
.saveAsTextFile("myOutput")
Run Code Online (Sandbox Code Playgroud)
然后工作变得极其缓慢!我想知道为什么这么慢?在2000多个分区中只有几个输出记录散布?有没有更好的方法来解决这个问题?
我在一个视图中发现了这个SQL片段,我对它的目的感到困惑(为了简洁起见缩短了实际的SQL):
SELECT
COALESCE(b.Foo, NULL) AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)
我想不出与null合并的目的的单一原因而不是仅仅这样做:
SELECT
b.Foo AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)
或者至少不要明确地包含NULL:
SELECT
COALESCE(b.Foo) AS Foo
FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)
我不知道是谁创作了这个(所以我不能问),是什么时候创作的,或者是为它编写的具体MS SQL Server版本(尽管如此,2008年之前).
有没有合理的理由与NULL合并而不是直接选择列? 我忍不住笑了,把它写成了一个新手的错误,但这让我想知道是否有一些我不知道的"边缘情况".
在CentOS 6上的PostgreSQL 9中,pref_users表中有60000条记录:
# \d pref_users
Table "public.pref_users"
Column | Type | Modifiers
------------+-----------------------------+--------------------
id | character varying(32) | not null
first_name | character varying(64) | not null
last_name | character varying(64) |
login | timestamp without time zone | default now()
last_ip | inet |
(... more columns skipped...)
Run Code Online (Sandbox Code Playgroud)
另一张桌子可容纳大约500名用户,不允许再玩游戏:
# \d pref_ban2
Table "public.pref_ban2"
Column | Type | Modifiers
------------+-----------------------------+---------------
id | character varying(32) | not null
first_name | character varying(64) |
last_name | character varying(64) …Run Code Online (Sandbox Code Playgroud) coalesce ×10
sql ×4
mysql ×2
nvl ×2
oracle ×2
sql-server ×2
t-sql ×2
apache-spark ×1
clojure ×1
data.table ×1
dataframe ×1
dplyr ×1
ifnull ×1
join ×1
left-join ×1
oracle11g ×1
outer-join ×1
postgresql ×1
r ×1
replace ×1
scala ×1