【问题标题】:SQL query with CASE WHEN by dbgetQuery does not work [closed]dbgetQuery 使用 CASE WHEN 的 SQL 查询不起作用[关闭]
【发布时间】:2020-09-12 13:52:28
【问题描述】:

我有一个问题:我在 R 中测试了 CASE WHEN SQL 查询,但我得到了一个错误。能否请您提出一个解决方案?

这里是重现的代码:

library(sparklyr)
library(gapminder)
spark_conn <- spark_connect(master = "local")
data("gapminder")
copy_to(spark_conn, gapminder)
src_tbls(spark_conn)

#The query gave an error
DBI::dbGetQuery(spark_conn, "
                SELECT *
                CASE WHEN pop > 100000000 THEN 'Biggy'
                WHEN pop < 10000000 THEN 'Small'
                ELSE 'Medium' END
                AS pop_category
                FROM gapminder 
                WHERE year = 1957
                ")


Error: org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input 'WHEN' expecting <EOF>(line 3, pos 21)

== SQL ==

                SELECT *
                CASE WHEN pop > 10000000 THEN 'Biggy'
---------------------^^^
                WHEN pop < 10000000 THEN 'Small'
                ELSE 'Medium' END
                AS pop_category
                FROM gapminder 

【问题讨论】:

  • CASE 之前缺少一个逗号。此外,SELECT * 可能应该是 SELECT pop_category.*

标签: sql r dbi sparklyr


【解决方案1】:

* 后面缺少逗号 ,。只需在其后添加逗号,您的查询应该可以正常工作

SELECT *,
    CASE WHEN pop > 100000000 THEN 'Biggy'
    WHEN pop < 10000000 THEN 'Small'
    ELSE 'Medium' END
    AS pop_category
FROM gapminder 
WHERE year = 1957

【讨论】:

  • 我确认,它工作正常
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多