首页 > 解决方案 > HAVING 子句中带有 GROUP BY 子句的 AVG

问题描述

编写查询以显示制造商和公司制造的型号数量,当且仅当制造商的平均保修期超过 3 年。为计数指定一个别名为“TOTAL_COUNT”。(提示:使用 Mobile_Master 建表检索记录) 在 oracle sql 中执行

select MANUFACTURER, count(IME_NO) AS 
TOTAL_COUNT
from MOBILE_MASTER
where WARRANTY_IN_YEARS>3
group BY MANUFACTURER;

这是我写的查询,但是

节目输出

MANUFACTURER TOTAL_COUNT
------------ -----------
Samsung           1
Nokia             1

预期产出

MANUFACTURER TOTAL_COUNT
------------ -----------
Samsung           3
IME_NO     MODEL_NAME       MANUFACTURER         DATE_OF_MANUF WARRANTY_IN_YEARS     PRICE DISTRIBUTOR_ID SPEC_NO
---------- ---------- ----------
SA100010   SamsungS2        Samsung          12-APR-08             4
     25000 SA110      SP1
SA100020   SamsungS3        Samsung          02-MAR-10             3
     13000 SA110      SP2
SA100030   SamsungACE       Samsung          25-DEC-09             3
     15000 SA111      SP3
NO100010   NokiaAsha        Nokia            18-SEP-11             2
      6500 NO111      SP4
NO100020   NokiaLumiaB2     Nokia            15-OCT-07             2
     22000 NO110      SP3
NO100030   NokiaLumiaC2     Nokia            25-NOV-09             5
     14000 NO111      SP4

SQL 架构

标签: sqloracle

解决方案


where WARRANTY_IN_YEARS>3你的问题不是有,而是

...仅当制造商的平均保修期超过 3 年时

关键词是平均。

要基于聚合函数进行过滤,您需要在HAVING子句中使用过滤器,而不是WHERE像这样的子句:

  SELECT MANUFACTURER, COUNT (IME_NO) AS TOTAL_COUNT
    FROM mobile_master
GROUP BY manufacturer
  HAVING AVG (WARRANTY_IN_YEARS) > 3;

推荐阅读