【发布时间】:2020-12-27 05:02:41
【问题描述】:
亚马逊红移 1.0.22169
我正在尝试按公司名称排序并首先放置任何“N/A”值。我有一个像这样的简单测试表:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company 3 |
| 2 | Company 1 |
| 3 | N/A |
| 4 | Company 2 |
+----+-----------+
对于 MySQL,我使用以下内容:
SELECT
`name` AS 'company'
FROM
`companies`
GROUP BY
`company`
ORDER BY
CASE `company` WHEN 'N/A' THEN 1 ELSE 2 END ASC,
`company` ASC
得到想要的结果:
+-----------+
| company |
+-----------+
| N/A |
| Company 1 |
| Company 2 |
| Company 3 |
+-----------+
但在 Redshift 中尝试这样做时:
SELECT
"name" AS "company"
FROM
"companies"
GROUP BY
"company"
ORDER BY
CASE "company" WHEN 'N/A' THEN 1 ELSE 2 END ASC,
"company" ASC
我收到以下错误:
Query 1 ERROR: ERROR: column "company" does not exist in companies
有什么建议可以调整它以适用于 PostgreSQL 吗?
【问题讨论】:
-
错误出现在哪一行,如果您使用
"name"而不是那里的"company"别名,它会起作用吗? -
是的,但如果可能的话,我必须让它与别名一起使用。这是问题的简化版本。真正的查询使用类似于
COALESCE("companies"."name", "other_table"."name", "another_table"."name", 'N/A') AS "company"。 -
@Noah 看来你的建议是让它工作的唯一方法。谢谢
标签: sql sql-order-by amazon-redshift aggregate-functions column-alias