【问题标题】:How to fix error “aggregate functions are not allowed in WHERE”如何修复错误“WHERE 中不允许使用聚合函数”
【发布时间】:2016-12-22 06:43:02
【问题描述】:

如何解决这个错误

Err] 错误:WHERE 中不允许使用聚合函数

这是我的查询

select count(case daftar.daftar when 'sd' then 1 else null end) as sd,
 count(case daftar.daftar when 'smp' then 1 else null end) as smp,
 count(case daftar.daftar when 'sma' then 1 else null end) as sma
from daftar
join gelombang on  daftar.gel=gelombang.id
join ajaran on ajaran.id=gelombang.id_ajar
join tahun on tahun.id=ajaran.tahun
where daftar.status='terima' and daftar.pindahan='no' and tahun.id= max(tahun.id)

【问题讨论】:

标签: postgresql


【解决方案1】:

您可以使用“HAVING”来解决这个问题:

拥有 tahun.id=max(tahun.id)

select count(case daftar.daftar when 'sd' then 1 else null end) as sd,
 count(case daftar.daftar when 'smp' then 1 else null end) as smp,
 count(case daftar.daftar when 'sma' then 1 else null end) as sma
from daftar
join gelombang on  daftar.gel=gelombang.id
join ajaran on ajaran.id=gelombang.id_ajar
join tahun on tahun.id=ajaran.tahun
where daftar.status='terima' and daftar.pindahan='no' 
HAVING tahun.id= max(tahun.id)

【讨论】:

    【解决方案2】:

    一种选择是使用子查询来计算最大值:

    select count(case daftar.daftar when 'sd' then 1 else null end) as sd,
           count(case daftar.daftar when 'smp' then 1 else null end) as smp,
           count(case daftar.daftar when 'sma' then 1 else null end) as sma
    from daftar
    inner join gelombang
        on daftar.gel = gelombang.id
    inner join ajaran
        on ajaran.id = gelombang.id_ajar
    inner join tahun
        on tahun.id = ajaran.tahun
    where daftar.status = 'terima' and
          daftar.pindahan = 'no'   and
          tahun.id = (select max(id) from tahun)
    

    【讨论】:

      【解决方案3】:

      聚合我们仅在 SELECT 块中使用的函数。对于这种情况,您可以使用内部选择:where daftar.status='terima' and daftar.pindahan='no' and tahun.id=(select max(id) from tahun)

      【讨论】:

      • 这并不完全正确。您也可以在 HAVING 子句中使用聚合。
      • 感谢您的好意和建议我正在努力学习聚合
      【解决方案4】:

      使用子查询、分组依据或有子句

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 2017-06-16
        • 2019-02-21
        • 2020-04-09
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 2021-05-06
        相关资源
        最近更新 更多