使用 case 语句时,PostgreSQL 列必须出现在 GROUP BY 子句中或在聚合函数中使用

use*_*587 5 sql postgresql

我正在使用 case 语句来计算两列,primary_specialty并且secondary_specialty. 这工作得很好,但是,我想然后执行GROUP BYpd.id收到以下错误:

column "pppd.created_at" must appear in the GROUP BY clause or be used in an aggregate function

所需的输出是每行一行,并pd有一列primary_specialtysecondary_specialty

SELECT pd.id,
       pd.npi,
       pppd.created_at AS "date_submitted", 
       pppd.converted_at AS "date_approved", 
       dp.created_at AS "date_profile_created",
       t.description AS "npi_specialty",
       case when ds.ordinal = 1 then s.name end as "primary_specialty",
       case when ds.ordinal = 2 then s.name end as "secondary_specialty"

FROM potential_doctors AS pd
     INNER JOIN patient_profile_potential_doctors as pppd on pd.id = pppd.potential_doctor_id
     INNER JOIN doctor_taxonomies AS dt on pd.id = dt.potential_doctor_id
     INNER JOIN taxonomies AS t on dt.taxonomy_id = t.id
     INNER JOIN doctor_profiles AS dp on pd.npi = dp.npi
     INNER JOIN doctor_specialties AS ds on dp.id = ds.doctor_profile_id
     INNER JOIN specialties AS s on ds.specialty_id = s.id
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 3

这可能是您想要的查询:

SELECT pd.id, pd.npi, pppd.created_at AS "date_submitted", pppd.converted_at AS "date_approved", 
       dp.created_at AS "date_profile_created",
       t.description AS "npi_specialty",
       max(case when ds.ordinal = 1 then s.name end) as "primary_specialty",
       max(case when ds.ordinal = 2 then s.name end) as "secondary_specialty"
FROM potential_doctors AS pd
     INNER JOIN patient_profile_potential_doctors as pppd on pd.id = pppd.potential_doctor_id
     INNER JOIN doctor_taxonomies AS dt on pd.id = dt.potential_doctor_id
     INNER JOIN taxonomies AS t on dt.taxonomy_id = t.id
     INNER JOIN doctor_profiles AS dp on pd.npi = dp.npi
     INNER JOIN doctor_specialties AS ds on dp.id = ds.doctor_profile_id
     INNER JOIN specialties AS s on ds.specialty_id = s.id
GROUP BY pd.id, pd.npi, pppd.created_at,  pppd.converted_at, t.description
Run Code Online (Sandbox Code Playgroud)