在PostgreSQL数据库

问题描述:

一列不同的选择记录,我得到了以下的记录,其中不同的人有同一个名字:在PostgreSQL数据库

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 BYDISTINCTDISTINCT 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记录。

有没有人帮助我?

+1

“*没有为我工作*”不是一个可接受的问题描述。告诉我们你已经尝试了什么以及你得到的错误。 –

+1

您需要描述如何为每个family_id选择一次该名称。 – jarlh

+0

@a_horse_with_no_name你能告诉我如何把一个表放入堆栈溢出?我用markdown试了一下,用html表和一个简单的文本表(http://www.sensefulsolutions.com/2010/10/format-text-as-table.html)。没有工作。所以我认为这比没有好。 – coderuby

如果您包含id,您可能不会指定组中的所有字段,那么这将使行具有唯一性。

尝试类似:

SELECT 
    name, category_id, birthdate, family_id 
FROM family 
GROUP BY 
    name, category_id, birthdate, family_id; 
+0

与'SELECT DISTINCT'相同,不会解决OP的问题。 (所有的生日都是独一无二的。) – jarlh

+0

但coderuby想要输出 –

+0

@a_horse_with_no_name中的'id'列,那么他会喜欢哪个ID?因为每次查询运行时可能会有所不同,具体取决于DBE如何评估事物。 –

它曾与DISTINCT ON

下相当奏效:

SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table; 

我要检查的唯一事情是排序。但我想分享我的解决方案到目前为止。