在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 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记录。
有没有人帮助我?
如果您包含id,您可能不会指定组中的所有字段,那么这将使行具有唯一性。
尝试类似:
SELECT
name, category_id, birthdate, family_id
FROM family
GROUP BY
name, category_id, birthdate, family_id;
与'SELECT DISTINCT'相同,不会解决OP的问题。 (所有的生日都是独一无二的。) – jarlh
但coderuby想要输出 –
@a_horse_with_no_name中的'id'列,那么他会喜欢哪个ID?因为每次查询运行时可能会有所不同,具体取决于DBE如何评估事物。 –
它曾与DISTINCT ON
。
下相当奏效:
SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table;
我要检查的唯一事情是排序。但我想分享我的解决方案到目前为止。
“*没有为我工作*”不是一个可接受的问题描述。告诉我们你已经尝试了什么以及你得到的错误。 –
您需要描述如何为每个family_id选择一次该名称。 – jarlh
@a_horse_with_no_name你能告诉我如何把一个表放入堆栈溢出?我用markdown试了一下,用html表和一个简单的文本表(http://www.sensefulsolutions.com/2010/10/format-text-as-table.html)。没有工作。所以我认为这比没有好。 – coderuby