【问题标题】:"column must appear in the GROUP BY clause or be used in an aggregate function"“列必须出现在 GROUP BY 子句中或在聚合函数中使用”
【发布时间】:2018-05-16 09:42:55
【问题描述】:

我在 postgresql 中有这个查询,我期望的是一个有两列的表。一个称为计数器,另一个称为 forn_primario。 但是我得到了这个错误:“列“forn_primario”必须出现在 GROUP BY 子句中或用于聚合函数中”

Select MAX(contador) as counter, forn_primario
From(
Select COUNT(DISTINCT categoria) as contador, forn_primario
From produto
Group by forn_primario)t

也在这个查询之后

Select COUNT(DISTINCT categoria) as contador, forn_primario
From produto
Group by forn_primario

我得到这张桌子

 contador | forn_primario 
----------+---------------
        1 | 103246782
       17 | 113056729
        2 | 120456781
        3 | 123456719
        1 | 133956139
        2 | 143856248
        2 | 153756357
        1 | 163656466
        2 | 173516575
        1 | 183426684
        1 | 193336793

在主查询之后我应该有这个表:

  counter | forn_primario 
----------+---------------
       17 | 113056729

【问题讨论】:

  • 答案在错误信息中。

标签: sql postgresql


【解决方案1】:

我想你想要这个:

Select COUNT(DISTINCT categoria) as contador, forn_primario
From produto
Group by forn_primario
Order by contador DESC
Limit 1;

【讨论】:

  • 如果两个 forn_primario 具有相同的计数怎么办。需要使用dense_rank()
  • 有效,但仅在这种情况下,因为如果我有超过 1 个具有相同计数的 forn_prim,它将无法工作
  • @TiagoTaveira 。 . .在这种情况下,您可以使用rank()/dense_rank() 解决问题。我没有提到这一点,因为没有group by 的聚合查询总是只返回一行。
【解决方案2】:

查询

SELECT COUNT(DISTINCT(categoria)) as Contador, forn_primario FROM produto GROUP BY forn_primario ORDER BY Contador DESC LIMIT 1

【讨论】:

  • 如果有多个forn_primario具有相同的计数器,它将不起作用
猜你喜欢
  • 2013-11-05
  • 2021-06-25
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多