【发布时间】:2016-08-18 23:01:42
【问题描述】:
我在 Redshift 中有一个如下所示的表:
col1 | col2 | col3 | col4 | col5 | col6
=======================================
123 | AB | SSSS | TTTT | PQR | XYZ
---------------------------------------
123 | AB | SSTT | TSTS | PQR | XYZ
---------------------------------------
123 | AB | PQRS | WXYZ | PQR | XYZ
---------------------------------------
123 | CD | SSTT | TSTS | PQR | XYZ
---------------------------------------
123 | CD | PQRS | WXYZ | PQR | XYZ
---------------------------------------
456 | AB | GGGG | RRRR | OPQ | RST
---------------------------------------
456 | AB | SSTT | TSTS | PQR | XYZ
---------------------------------------
456 | AB | PQRS | WXYZ | PQR | XYZ
我有另一个表也有类似的结构和数据。
从这些表中,我需要在 (edited) 任何一个表中选择 col3 中没有“SSSS”和 col4 中没有“TTTT”的值 .我还需要按 col1 和 col2 中的值对结果进行分组。
在这里,我希望我的查询返回:
123,CD
456,AB
我不希望 123, AB 出现在我的结果中,因为对应于 123, AB 的行之一分别在 col3 和 col4 中具有 SSSS 和 TTTT。即,我想在我正在查找的两个表中的任何一个中省略 col3 和 col4 中具有 SSSS 和 TTTT 的项目。
我对编写查询以从数据库中提取信息非常陌生,所以请原谅我的无知。我被告知要探索 GROUP BY 和 ORDER BY,但我不确定我是否足够了解它们的用法。
我的查询看起来像:
SELECT * from table1 join table2 on
table1.col1 = table2.col1 AND
table1.col2 = table2.col2
WHERE
col3 NOT LIKE 'SSSS' AND
col4 NOT LIKE 'TTTT'
GROUP BY col1,col2
但是,此查询会引发错误:col5 must appear in the GROUP BY clause or be used in an aggregate function;
我不确定如何继续。我会很感激任何帮助。谢谢!
【问题讨论】:
-
你写的不是真的/不完整。如果 col5 不在查询的 SELECT 列表中,您将不会收到有关 col5 的错误消息。当您发布并展示您尝试过的内容时,请准确展示您尝试过的内容;否则我们都只是浪费时间。
-
你是对的 - 我的查询中有一个
SELECT *。修改问题。 -
这没有意义:您说您只想获得前两列(这就是您在示例中显示的内容)。请确保您准确地解释了您的需求;如果示例不正确,请也修复它。
-
这样我们就清楚了。如果在该组中找到至少一个
SSSS和TTTT的组合,是否要删除整个组(在这种情况下为123 | AB)? -
@Nicholas Krasnov 是的,没错。如果
123, AB的行之一具有SSSS和TTTT,我不希望考虑任何123, AB行
标签: amazon-redshift