2015-12-29 60 views
2

我收到此错误:必须出现在GROUP BY子句中的PostgreSQL

ERROR: column "programmer.pname" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select pname, min(age(doj)) from programmer ;

我有一个表叫programmer和列dobdoj与日期。

这里doj是加入日期。

我想找到所有程序员中经验最少的程序员。

这是我的尝试:

SELECT pname, min(age(doj)) FROM programmer; 

,我得到上述错误。

什么是programmer.pname以及上述的正确查询是什么?

+0

您应该使用GROUP BY找到所有程序员的最小经验的程序员'选择PNAME,分从程序员 组由PNAME(年龄(DOJ));'[通过SQL组(HTTP ://www.w3schools.com/sql/sql_groupby.asp) –

+0

https://stackoverflow.com/search?q=[postgresql]+must+appear+in+the+GROUP+BY+clause –

回答

2

GROUP BY语句与聚合函数一起使用,以便按一个或多个列对结果集进行分组。

select pname, min(age(doj)) 
from programmer 
group by pname 

要找到所有的程序员

select pname 
     ,min(age(doj)) mindoj 
    from programmer 
    group by pname 
    order by mindoj limit 1 

最小经验的程序员
select pname,doj 
from programmer 
order by doj limit 1 

你可能有一个以上的最低有经验的程序员(程序员用相同的最小经验)在这种情况下,你使用这个

select pname,doj 
from programmer 
where doj=(select min(doj) from programmer) 

what is that programmer.pname and what is the correct query for the above?

程序员pname = 表名COLUMNNAME

+0

工作。但是如果我有很多行,那么也会显示这些行。我的目标是显示一个且只有最少的有经验的程序员。 – zeewagon

+0

@zeewagon如果我理解正确,然后尝试'选择PNAME,分(年龄(DOJ))mindoj 从程序员 组由PNAME 为了通过mindoj限制1' –

+0

@zeewagon试试这个太'从程序员 为了选择PNAME by doj limit 1' –

相关问题