【问题标题】:must appear in the GROUP BY clause in postgresql必须出现在 postgresql 的 GROUP BY 子句中
【发布时间】:2016-04-03 01:34:17
【问题描述】:

我收到此错误:

错误:列“programmer.pname”必须出现在 GROUP BY 子句中或用于聚合函数中
第 1 行:从程序员那里选择 pname, min(age(doj)) ;

我有一个名为 programmer 的表和列 dobdoj 和日期。

这里doj是加入日期。

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

这是我的尝试:

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

我得到了上述错误。

programmer.pname 是什么?上面的正确查询是什么?

【问题讨论】:

  • 你应该使用group by来找到所有程序员中经验最少的程序员select pname, min(age(doj)) from programmer group by pname ;sql-group by

标签: sql postgresql group-by


【解决方案1】:

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)

programmer.pname 是什么,正确的查询是什么? 上面?

程序员.pname = 表名.列名强>

【讨论】:

  • 那行得通。但如果我有很多行,也会显示这些行。我的目标是展示一位也是唯一一位经验最少的程序员。
  • @zeewagon 如果我理解正确,请尝试select pname, min(age(doj)) mindoj from programmer group by pname order by mindoj limit 1
  • @zeewagon 也试试这个select pname from programmer order by doj limit 1
猜你喜欢
  • 1970-01-01
  • 2020-02-08
  • 2016-05-26
  • 1970-01-01
  • 2015-04-20
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多