【发布时间】:2014-07-26 00:42:16
【问题描述】:
我有下表:
my_table
------------------------
| common_id | uniq_val |
------------------------
| 1 | foo |
------------------------
| 1 | bar |
------------------------
我想从中聚合值,使得结果查询看起来像:
DESIRED RESULT
---------------------------------------
| common_id | uniq_val_1 | uniq_val_2 |
---------------------------------------
| 1 | foo | bar |
---------------------------------------
OR
---------------------------------------
| common_id | uniq_val_1 | uniq_val_2 |
---------------------------------------
| 1 | bar | foo |
---------------------------------------
所以我写了查询:
SELECT t1.common_id, t1.uniq_val, t2.uniq_val
FROM my_table t1 JOIN my_table AS t2
ON t1.common_id=t2.common_id
WHERE t1.uniq_val!=t2.uniq_val;
结果
RESULTING SELECT
---------------------------------------
| common_id | uniq_val_1 | uniq_val_2 |
---------------------------------------
| 1 | foo | foo |
---------------------------------------
| 1 | bar | bar |
---------------------------------------
但我只需要其中一列,所以我应该能够执行 GROUP BY t1.common_id,例如:
SELECT t1.common_id, t1.uniq_val, t2.uniq_val
FROM my_table t1 JOIN my_table AS t2
ON t1.common_id=t2.common_id
WHERE t1.uniq_val!=t2.uniq_val
GROUP BY t1.common_id;
不幸的是,这会返回错误:
ERROR: column "t1.uniq_val" must appear in the GROUP BY clause or be used in an aggregate function
谁能指出我的逻辑错误?
【问题讨论】:
-
每个 common_id 值是否总是只有 2 个唯一值?有的有 2 个,有的有 3 个或 4 个吗?
标签: sql postgresql join group-by