关于sql:部分不同的选择

Partially distinct select

本问题已经有最佳答案,请猛点这里访问。

我有一个字段utmtracking_id的表。 每个utm可能有许多tracking_id s。
所以我需要为每个utm选择不同的utm和任何一个跟踪id(让我们说第一个)。

例如,我们得到了表格:

1
2
3
4
5
6
7
8
utm   | tracking_id
-------------------
ddff  |      1
ddff  |      2
llzz  |      3
ddff  |      4
ohoh  |      5
ohoh  |      6

作为我希望获得的输出:

1
2
3
4
5
utm   | tracking_id
-------------------
ddff  |      1
llzz  |      3
ohoh  |      5

我使用PostgreSQL 9.1。
有没有办法用SQL做到这一点?


1
2
3
SELECT utm, MIN(tracking_id)
FROM t
GROUP BY utm


如果您只有一列,那么简单聚合就是您想要的,请参考Clodoaldo Neto的建议。
如果您有多个列,则可以在语法上使用dictinst:

1
2
3
4
SELECT DISTINCT ON(utm)
    utm, tracking_id, column1, column2, ...
FROM t
ORDER BY utm, tracking_id

sql小提琴demo