如何在 SQL 中正确使用大小写
How to use case properly in SQL
我在以下 SQL 代码中遇到了一个小错误,我不明白其中的原因。
我正在使用 AWS Athena。
SELECT
icustay_id,
itemid,
date_diff('second', TIMESTAMP '1970-01-01 00:00:00', starttime) AS starttime,
date_diff('second', TIMESTAMP '1970-01-01 00:00:00', endtime) AS endtime,
CASE WHEN itemid IN (30120,221906,30047) AND rateuom='mcg/kg/min' THEN CAST(rate AS DECIMAL(10,3))
FROM mimiciii.inputevents_mv
WHERE itemid IN (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307)
ORDER BY icustay_id, itemid, starttime
错误如下
An error occurred (InvalidRequestException) when calling the
StartQueryExecution operation: line 2:1: extraneous input 'case'
expecting {, ',', 'FROM', 'WHERE', 'GROUP', 'ORDER', 'HAVING',
'LIMIT', 'UNION', 'EXCEPT', 'INTERSECT'} unable to rollback
Case expression 的语法是:
CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END
您的 select 语句中缺少 END
。只需在 then
条件后添加 END
关键字,如下面的查询所示。它应该可以正常工作。
query_vaso_mv = """
select icustay_id, itemid, date_diff('second', timestamp '1970-01-01 00:00:00', starttime) as starttime, date_diff('second', timestamp '1970-01-01 00:00:00', endtime) as endtime,
case when itemid in (30120,221906,30047) and rateuom='mcg/kg/min' then cast(rate as DECIMAL(10,3)) end
from mimiciii.inputevents_mv
where itemid in (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307)
order by icustay_id, itemid, starttime
"""
我在以下 SQL 代码中遇到了一个小错误,我不明白其中的原因。
我正在使用 AWS Athena。
SELECT
icustay_id,
itemid,
date_diff('second', TIMESTAMP '1970-01-01 00:00:00', starttime) AS starttime,
date_diff('second', TIMESTAMP '1970-01-01 00:00:00', endtime) AS endtime,
CASE WHEN itemid IN (30120,221906,30047) AND rateuom='mcg/kg/min' THEN CAST(rate AS DECIMAL(10,3))
FROM mimiciii.inputevents_mv
WHERE itemid IN (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307)
ORDER BY icustay_id, itemid, starttime
错误如下
An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: line 2:1: extraneous input 'case' expecting {, ',', 'FROM', 'WHERE', 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'UNION', 'EXCEPT', 'INTERSECT'} unable to rollback
Case expression 的语法是:
CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END
您的 select 语句中缺少 END
。只需在 then
条件后添加 END
关键字,如下面的查询所示。它应该可以正常工作。
query_vaso_mv = """
select icustay_id, itemid, date_diff('second', timestamp '1970-01-01 00:00:00', starttime) as starttime, date_diff('second', timestamp '1970-01-01 00:00:00', endtime) as endtime,
case when itemid in (30120,221906,30047) and rateuom='mcg/kg/min' then cast(rate as DECIMAL(10,3)) end
from mimiciii.inputevents_mv
where itemid in (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307)
order by icustay_id, itemid, starttime
"""