无效的操作:子查询必须仅返回一列— Amazon Redshift

时间:2019-06-28 13:58:56

标签: sql amazon-redshift

我用w / o粘贴了一张图像,我希望有帮助

enter image description here

我正在尝试计算单个行占某一特定列总数的百分比。

我可以在SELECT语句中使用别名来实现它,但是我可以在列per的帮助下进行进一步的计算,在列中我可以派生其他列,因此我需要在{ {1}}个查询。我尝试了以下查询,但出现错误:

  

无效操作:子查询只能返回一列

我没有唯一的ID。我不能在此使用UPDATE语句。

我要去哪里错了?

IN

2 个答案:

答案 0 :(得分:0)

您正在尝试使用4个值更新1列。想象一下,没有子查询:

{{1}}

您的子查询必须返回单个列和一行。

答案 1 :(得分:0)

您的子查询返回多个和多个。您需要确切地告诉Redshift,如何将所有返回的值和行应用于UPDATE编辑过的表。

例如:

UPDATE tbl_a
SET tbl_a.per = code_sum.per
FROM tbl_a
JOIN (SELECT code
           , SUM(amnt) AS per
      FROM tbl_a
      GROUP BY code
     ) code_sum
   ON tbl_a.code = code_sum.code
WHERE per IS NULL
;

侧面说明:为获得最佳查询速度,请不要在查询中添加DISTINCT,除非您知道需要不同的结果。您要让Redshift执行不必要的额外操作,因为您在同一列上已经有一个GROUP BY。通常,Redshift能够跳过多余的DISTINCT步骤,但并非总是如此。