【发布时间】:2021-03-15 15:15:24
【问题描述】:
我的表 k 有:
num2 | count
aa1 | 10
aa2 | 5
bb | 2
bb | 4
cc | 80
表 t 与:
num1 | num2
a | aa1
a | aa2
" " | bb
" " | bb
" " | cc
现在我想获取每个 num1 的 MIN 和 MAX 计数,同时将 num1 中的 " " 替换为 num2(Fill rows in column A with value of column B if condition in column A is met):
用 num2 替换 num1 中的“”(有效):
SELECT (CASE
WHEN t.num1 = ' ' THEN TO_CHAR(k.num2)
ELSE t.num1
END) AS 'num1',
k.num2 AS 'num2',
k.count AS 'count'
--
FROM table1 AS k
--
LEFT JOIN table2 AS t
ON k.num2 = t.num2
--
WHERE k.count > 1
--
;
导致:
num1 | num2 | count
a | aa1 | 10
a | aa2 | 5
bb | bb | 2
bb | bb | 4
cc | cc | 80
但是使用 GROUP BY 获得每个 num1 的 MIN + MAX 不会:
SELECT (CASE
WHEN t.num1 = ' ' THEN TO_CHAR(k.num2)
ELSE t.num1
END) AS 'num1',
MIN(k.count) AS 'count_MIN',
MAX(k.count) AS 'count_MAX'
--
FROM table1 AS k
--
LEFT JOIN table2 AS t
ON k.num2 = t.num2
--
WHERE k.count > 1
--
GROUP BY (CASE
WHEN t.num1 = ' ' THEN TO_CHAR(k.num2
ELSE t.num1
END)
--
;
这应该导致:
num1 | count_MIN | count_MAX
a | 5 | 10
bb | 2 | 4
cc | 80 | 80
但是当我运行上面的代码时,我在 DBeaver 中得到了错误:
SQL 错误 [4200]:不是有效的 GROUP BY 表达式
?
【问题讨论】:
-
您的数据有一个表,但您的查询有两个,这使您的问题很不清楚。
-
@GMB 抱歉,添加了更多信息。现在好点了吗?
-
您在
TO_CHAR(k.num2中缺少右括号) -
打错字了,原代码有括号。
-
嗨@Vegam 在两个地方你缺少右括号(CASE WHEN 和 GROUP BY)。另外,您还没有看到我的答案,因为您在给表别名时还没有删除 AS 关键字?检查下面的答案...
标签: sql group-by case exasolution