egg*_*ert 2 sql postgresql aggregate-functions
示例数据:
test,test2
----------
a,qwer
b,wert
c,erty
d,rtuy
d,tyui
e,yuio
e,uiop
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个返回表中唯一值的查询:
SELECT
test
FROM aatest
GROUP BY test
HAVING (COUNT(test) = 1)
Run Code Online (Sandbox Code Playgroud)
这有效并返回 a、b 和 c,因为 d 和 e 不是唯一的。
但我也想打印出 test2 所以我试过:
select
test,
test2
from aatest
GROUP BY test
HAVING (COUNT(test) = 1)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误。
将其他列包装在聚合函数中,例如min()或max()。由于每个聚合只有一行,因此哪个并不重要:
SELECT test, min(test2) AS test2
FROM aatest
GROUP BY test
HAVING count(*) = 1;
Run Code Online (Sandbox Code Playgroud)
对于很多列,这更简单:
SELECT t1.* -- return all columns
FROM aatest t1
LEFT JOIN aatest t2 ON t2.test = t1.test AND t2.ctid <> t1.ctid
WHERE t2.test IS NULL;Run Code Online (Sandbox Code Playgroud)
假设没有 PK 或任何其他可以用来明确标识行的唯一列组合,我使用内部(特定ctid于Postgres!)元组 ID。有关的:
如果(test, test2)是唯一的:
SELECT t1.* -- return all columns
FROM aatest t1
LEFT JOIN aatest t2 ON t2.test = t1.test AND t2.test2 <> t1.test2
WHERE t2.test IS NULL;Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16667 次 |
| 最近记录: |