我得到了以下记录:不同的人有相同的名字:
id name category_id birthdate family_id
1 joe 2 2014-05-01 1
2 jack 3 2013-04-01 2
3 joe 2 1964-05-01 1
4 jack 5 1982-05-01 2
5 emma 1 2014-05-01 1
6 joe 3 2003-07-06 3
现在我需要一个查询结果如下。我想每个family_id只需要一次名字。之后我需要每条记录的所有值,包括id。如果桌子在路上走得更远,我也需要它们。所以结果应该包括所有值。
id name category_id birthdate family_id
1 joe 2 2014-05-01 1
2 jack 3 2013-04-01 2
5 emma 1 2014-05-01 1
6 joe 3 2003-07-06 3
我尝试了几种方法(GROUP BY
,DISTINCT
,DISTINCT ON
等),但没有一种方法适合我。
当我使用GROUP BY子句(GROUP BY name
)时,我得到ERROR: column "deals.id" must appear in the GROUP BY clause or be used in an aggregate function
。但是当我把id
放在条款中时,我得到了所有记录。
同样不同。在那里,我必须选择结果集应该是不同的所有字段。但我需要记录的所有值。并且由于主要的每个记录在我包含id时是不同的。
我尝试了一个已经过滤所有不同名称的子句。我在where子句中使用它们。但我得到了所有的价值,包括(当然)不同的名称/ family_id记录。
有人帮我吗?
答案 0 :(得分:1)
您可能没有指定组中的所有字段,如果您包含id,那么这将使行唯一。
尝试类似:
SELECT
name, category_id, birthdate, family_id
FROM family
GROUP BY
name, category_id, birthdate, family_id;
答案 1 :(得分:0)
它适用于DISTINCT ON
。
以下效果很好:
SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table;
我唯一需要检查的是订购。但到目前为止我想分享我的解决方案。