2015-12-29 57 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' –

相關問題