您可以在GROUP BY中未列出的列上使用HAVING子句吗?

时间:2015-04-28 06:11:33

标签: sql oracle group-by having

我有这个问题,我一直在努力,我找到的解决方案是每个Pecheur(渔夫)获得AVERAGE结果,是的,这有点可怕,这是一个学校项目。我基本上需要每个渔民的名字和地址,每个渔民在每份合同(CONTRAT)上至少收取两项费用(FRAIS),并且在2000年至2002年期间每年平均需要2次捕鱼(贵重)。必要的表列在from和JOIN中,我的问题是,我可以使用HAVING AVG(x)虽然x未列在Select也不在group by中,但只出现在FROM部分的表中。请注意,我没有真正的数据库来测试查询。

SELECT  pecheur.NOM as nom_Pecheur, 
        pecheur.ADRESSE as adresse

FROM    TP1_PECHEUR as pecheur
        INNER JOIN TP1_CONTRAT as contrat on pecheur.ID_PECHEUR=contrat.ID_PECHEUR
        INNER JOIN TP1_FRAIS_CONTRAT as frais_contrat on contrat.ID_CONTRAT=frais_contrat.ID_CONTRAT
        INNER JOIN TP1_FRAIS as frais on frais_contrat.ID_FRAIS=frais.ID_FRAIS
        INNER JOIN TP1_DECLARATION_PRISE as declaration_prise on pecheur.ID_PECHEUR=declaration_prise.ID_PECHEUR
        INNER JOIN TP1_PRISE as prise on declaration_prise.ID_DECLARATION_PRISE=prise.ID_DECLARATION_PRISE

WHERE   frais_contrat.ID IN ( SELECT  TP1_FRAIS_CONTRAT.ID, COUNT(*) as NB_FRAIS
                              FROM    TP1_FRAIS_CONTRAT
                              GROUP BY TP1_FRAIS_CONTRAT.ID
                              HAVING NB_FRAIS >= 2 )
        AND declaration_prise.DATE_DECLARATION BETWEEN '01-01-2000' AND '31-12-2002'

GROUP BY  nom_Pecheur

HAVING    AVG(prise.NOMBRE_POISSON) > 2;

1 个答案:

答案 0 :(得分:5)

  

...我的问题是,我可以使用HAVING AVG(x)虽然x未列入   选择也不在组中......

简短的回答是'是'。

SELECT
  ColB,
  ColC
FROM Testing
GROUP BY ColB, ColC
HAVING AVG(ColA) > 4;

SQL Fiddle example