【问题标题】:presto multiple columns in subquery not supported不支持子查询中的多个列
【发布时间】:2020-04-24 22:03:07
【问题描述】:

我只是了解一下 presto(和奇怪的表结构),但假设我有一个存储如下数据的表:

我希望编写一个查询以获取以下输出:

我尝试使用以下查询来解决这个问题:

SELECT DISTINCT

ts.id,

(SELECT
ts.trial_type,
ts.trial_score

FROM trial_scores ts

WHERE ts. = 12345678
AND ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d')) as previous_score,

(SELECT
ts.trial_type,
ts.trial_score

FROM trial_scores ts

WHERE ts. = 12345678
AND ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d')) as current_score

FROM trial_scores ts

但是,我不断收到来自查询引擎的错误“尚不支持子查询返回的多个列。找到 2”

是否有任何其他方法可以重写此查询以获得上述所需的输出?

可以确认我的两个内部子查询都是独立运行的,所以我想这是一个将它们与其他我无法理解的东西混合在一起的情况。

【问题讨论】:

  • 我有消息要告诉你。失败的不仅仅是 PrestoDB。它在大多数数据库中都会失败(尽管有一两个例外)。你的语法也不正确。 ts. 是什么?
  • @GordonLinoff 这只是我给 trial_scores 表的别名

标签: sql presto


【解决方案1】:

我怀疑你只是想要条件聚合。

SELECT ts.id,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_type END) as prev_trial_type,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -3, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_scoree END) as prev_trial_score,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_type END) as curr_trial_type,
       MAX(CASE WHEN ts.date = date_format(date_add('day', -2, CURRENT_DATE), '%Y-%m-%d') THEN ts.trial_scoree END) as curr_trial_score
FROM trial_scores ts
GROUP BY ts.id;

【讨论】:

  • 非常感谢!这成功了。 (有趣的是,我之前尝试过这个迭代,但之前的分数一直为空值,因为我的案例陈述既反对分数类型又反对日期)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2013-07-25
相关资源
最近更新 更多