如何修复必须出现在GROUP BY子句中或用于聚合函数

时间:2016-12-17 04:14:01

标签: postgresql

请帮帮我

我是postgres数据库中的新人

select
    case
        when daftar ='sd' then kouta
    end as a,
    case
        when daftar = 'smp' then kouta
    end as b,
    case
        when daftar = 'sma' then kouta
    end as c
from
    ajaran
GROUP BY
    tahun

和结果错误

  

[错误]错误:列“ajaran.daftar”必须出现在GROUP BY中   子句或在聚合函数中使用LINE 1:选择大小写时的情况   daftar ='sd'然后kouta结束,例如......

我在MySQL中尝试相同的查询,没有错误和成功分组 如何在pgsql中使用group?

我想通过tahun分组<​​/ p>

this my table

2 个答案:

答案 0 :(得分:0)

据推测,您希望sum()max()如下:

select tahun,
       max(case when daftar = 'sd' then kouta end) as a,
       max(case when daftar = 'smp' then kouta end) as b,
       max(case when daftar = 'sma' then kouta end) as c
from ajaran
group by tahun;

我认为错误非常清楚。 。 。 daftarkouta既不是group by中的键,也不是查询中的聚合函数。如果没有进一步的指导,例如样本数据和期望的结果,哪种聚合最合适是不明确的。

答案 1 :(得分:0)

分组时,您必须为每个组返回一个行,但您的选择不会将值汇总到一行。

提供汇总,例如使用max()

select
    tahun,
    max(case when daftar ='sd' then kouta end) a,
    max(case when daftar = 'smp' then kouta end) b,
    max(case when daftar = 'sma' then kouta end) c
from ajaran
group by tahun