精华内容
下载资源
问答
  • 一般SQL语句WHERE子句不能含有聚合函数的,否则报错:group function is not allowed here,那么我们如何去处理呢? 如下SQL: SELECT  T1.Loan_Contract_Id AS Contract_Id  ,CAST('20111231' AS DATE...

    一般SQL语句中,WHERE子句是不能含有聚合函数的,否则报错:group function is not allowed here,那么我们如何去处理呢?

    如下SQL:

    SELECT
       T1.Loan_Contract_Id              AS Contract_Id
       ,CAST('20111231' AS DATE FORMAT 'YYYYMMDD' ) AS Statis_Dt
       ,T1.Agmt_Holder                               AS Cust_Id
       ,T1.Loan_Amt                                  AS Contract_Amt
       ,null                                         AS ApplicantApp_Loan_Amt
       ,T1.Adv_Dt                                    AS Contr_Eff_Time
       ,T1.Mature_Dt                                 AS Contr_End_Time
       ,case when cast(substr(T1.Loan_Term,5,2) as integer) >0 then cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer)+1
       else cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer) end AS Contr_Term_Month
       ,null                                         AS Margin_Amt
    FROM DEV_DW_RDL.R04_B_IL_Contract T1
    WHERE
       T1.Data_Dt=cast('20111231' as date format 'YYYYMMDD')
    AND (T1.Loan_Appl_Approve_Stat_Cd='5' OR (T1.Loan_Appl_Approve_Stat_Cd='4' AND T1.Loan_Contract_Id IN (SELECT Approve_Content_Id FROM  DW_PVIEW.T05_IL_Approve_Evt WHERE MAX(Txn_Dt)=CAST('20111231' as date format 'YYYYMMDD'))))
    ;

    因为WHERE子句中含有MAX聚合函数,会报SELECT Failed. 3569:  Improper use of an aggregate function in a WHERE Clause.错误。

    作如下修改:

    SELECT
       T1.Loan_Contract_Id              AS Contract_Id
       ,CAST('20111231' AS DATE FORMAT 'YYYYMMDD' ) AS Statis_Dt
       ,T1.Agmt_Holder                               AS Cust_Id
       ,T1.Loan_Amt                                  AS Contract_Amt
       ,null                                         AS ApplicantApp_Loan_Amt
       ,T1.Adv_Dt                                    AS Contr_Eff_Time
       ,T1.Mature_Dt                                 AS Contr_End_Time
       ,case when cast(substr(T1.Loan_Term,5,2) as integer) >0 then cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer)+1
       else cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer) end AS Contr_Term_Month
       ,null                                         AS Margin_Amt
    FROM DEV_DW_RDL.R04_B_IL_Contract T1
    WHERE
       T1.Data_Dt=cast('20111231' as date format 'YYYYMMDD')
    AND (T1.Loan_Appl_Approve_Stat_Cd='5'
               OR (T1.Loan_Appl_Approve_Stat_Cd='4'
                        AND T1.Loan_Contract_Id IN ( SELECT tmp.Approve_Content_Id FROM
                        (SELECT Approve_Content_Id,MAX(Txn_Dt) AS Max_Txn_Dt FROM  DW_PVIEW.T05_IL_Approve_Evt GROUP BY Approve_Content_Id) tmp
                        WHERE tmp.Max_Txn_Dt=CAST('20111231' as date format 'YYYYMMDD'))))
    ;

    将聚合函数置于子集中,那么问题就迎刃而解了。

    展开全文
  • where条件里为什么不能有聚合函数

    千次阅读 2018-11-20 16:22:28
    首先我们应该熟悉什么聚合函数: ...那么我们不能where子句中使用这些函数,为什么呢? 聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的(这里过滤是在一个记...

    转自: https://blog.csdn.net/zhaomengszu/article/details/80784096

    首先我们应该熟悉什么聚合函数:

    例如SUM(),MIN(),Max()这类的,我们称作是聚合函数。

    那么我们不能在where子句中使用这些函数,为什么呢?

    聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的(这里过滤是在一个记录里边过滤的,基于"行"),在筛选过程中依赖“基于已经筛选完毕的数据得出的计算结果”是一种悖论,这是行不通的。更简单地说,因为聚集函数要对全列数据时行计算,因而使用它的前提是:结果集已经确定!

    而where子句还处于“确定”结果集的过程中,因而不能使用聚集函数。

    与where子句不能出现聚集函数正相反的是,我们几乎看不到不使用聚集函数的having子句。为什么?因为在水平方向上根据外部指定条件的筛选(也就是对行的筛选),where子句可以独立完成,剩下的往往都是需要根据结果集自身的统计数据进一步筛选了,这时,几乎都需要通过having子句配合聚集函数来完成。

    按照下面这个就是错误的,会报一个错误:Group function is not allowed here

     

    select department_id,avg(salary)
    
    from employees
    
    where avg(salary)>6000
    
    group by department_id
    
    --having avg(salary)>6000

     

     

    原因。

    sql语句的执行顺序为

     from子句

    where 子句

    group by 子句

    having 子句

    order by 子句

    select 子句

    首先得知道聚合函数是对结果集运算的,当在where子句使用聚合函数时,此时根据group by 分割结果集的子句还没有执行,此时只有from 后的结果集。

    所以无法在where子句中使用聚合函数。

    展开全文
  • 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以  Where和Having都是对查询结果的一种筛选,说的书面点就是设定条件的语句。下面分别说明其用法和异同点。 注:本文使用字段为oracle数据库...
  • Having子句和Where子句

    千次阅读 2019-05-14 14:45:10
    where 子句和having子句中的区别(此文章为借鉴的总结) ...3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 一、聚合函数 说明前我们先了解下聚合函数:聚合函数有时候也叫统计函数...

    where 子句和having子句中的区别(此文章为借鉴的总结)

    1.where 不能放在GROUP BY 后面
    2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE
    3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以

    一、聚合函数     说明前我们先了解下聚合函数:聚合函数有时候也叫统计函数,它们的作用通常是对一组数据的统计,比如说求最大值,最小值,总数,平均值( MAX,MIN,COUNT, AVG)等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。简单举个例子:SELECT SUM(sal) FROM emp,这里的SUM作用是统计emp表中sal(工资)字段的总和,结果就是该查询只返回一个结果,即工资总和。通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。 二、where子句     where自居仅仅用于从from子句中返回的值from子句返回的每一行数据都会用where子句中的条件进行判断筛选。where子句中允许使用比较运算符(>,<,>=,<=,<>,!=|等)和逻辑运算符(and,or,not)。 三、having子句     having子句通常是与order by 子句一起使用的。因为having的作用是对使用group by进行分组统计后的结果进行进一步的筛选

    四、下面我们通过where子句和having子句的对比,更进一步的理解它们。
        在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count),因为它是一句一句筛选的。HAVING子句可以让我们筛选成组后的对各组数据筛选。,而WHERE子句在聚合前先筛选记录。
    五、异同点
         它们的相似之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句与组有关,而不是与单个的行有关。
         最后:理解having子句和where子句最好的方法就是基础select语句中的那些句子的处理次序:where子句只能接收from子句输出的数据,而having子句则可以接受来自group by,where或者from子句的输入。

    展开全文
  • where和having

    2020-08-17 21:29:01
    在涉及到条件筛选时,where子句中不能有聚合函数,要想使用条件应该使用having。 这与语句的执行顺序有关。 WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组...

    SQL中常用的聚合函数有min/max/count/avg/sum,通常和group by连用。在涉及到条件筛选时,where子句中不能有聚合函数,要想使用条件应该使用having

    这与语句的执行顺序有关。

    WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选。因此执行where时不存在对应的聚合函数的值,因此where子句中不能有聚合函数。

    展开全文
  • 我们在写SQL时常常会使用where和...而对于where和having子句最大的区别在于:Where中不能使用聚合函数,而having中可以使用聚合函数。 那么为什么会这种限制呢?我们来看个例子: –找出所有记录中id最大的记录:...
  • 逻辑运算符 NOT运算符 not运算符可以表示否定的意思,而且它不能单独使用,一般是搭配其他查询条件来一起使用,如下图: 其中的“not product_price>=200”等价于“product_price<...在where子句中使用A
  • 不能针对某一行的数据进行操作, 而是针对整个表的数据进行操作的; 重置auto_increment项 语法: truncate table [表的名称]; 聚合函数: COUNT函数: 查询表当中数据的个数 select COUNT(*) from exam_resu
  • 一、聚合函数 AVG 平均值 COUNT 计数 MAX 最大值 MIN 最小值 SUM 合计 练习 –多少员工? —多少种工资 –多少个部门 ...​ 不能WHERE 子句中使用组函数(聚合函数)。 ​ 可以在 HAV...
  • (2)聚合函数不能放在WHERE子句中!!!聚合函数的使用之前,需要先明确无误的确定数据的范围;在WHERE中使用聚合函数是万万不能的,这在逻辑上就说不通,MySQL自然也不支持这样做!!! 一:Having子句的一个...
  • oracle函数

    2013-10-22 11:20:11
    oracle中函数主要两种类型: 单行函数(single row ...(sql中需要having子句的原因是因为where子句中不能使用聚合函数) 单行函数主要5种: 字符函数:对由字符组成的字符串进行操作,结果返回字符串 数
  • where 子句后面不能有聚合函数;清空表的所有元素;
  • where中不能使用聚合函数)   having可以对group分组的结果集进行过滤,因其执行在分组之后,并其过滤可以基于分组聚集值。(having子句中可以直接使用聚合函数) 这样的说法,“having子句中的列只能是group ...
  • 总结:1,在where子句中不能用分组聚合函数。 2,如果没有group by 子句,select 不能同时出现字段与分组的聚合函数。 3,在 group by 的子句的查询中,select 查询的列 要么出现在group By 子句中的字段。要么...
  • where中不能使用聚合函数) having可以对group分组的结果集进行过滤,因其执行在分组之后,并其过滤可以基于分组聚集值。(having子句中可以直接使用聚合函数) 这样的说法,“having子句中的列只能是group ...
  • having 子句

    2018-03-13 14:59:10
    /*having和where有四点不同 ...③having可以使用聚合函数,而where不能 ④分组的名字必须是查询的字段 */ /*查询学生表分数小于80分的同学分数最低的姓名和最低分数*/ select name,min(fenshu) as 最小分...
  • SQL的having和where的区别 WHERE 子句 ...如需条件地从表中选取数据,可将 WHERE 子句添加到 SELECT...注:Where中不能使用聚合函数 HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无
  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行先去掉,即在分组前就过滤掉数据,条件中不能包含聚合函数, 而having子句被限制在select语句中定义的列和聚合表达式上,通常,你需要通过在...
  • 在没有嵌套的查询,select列表的表达式,having自居使用聚合函数是有效的,在where子句、form子句或group by子句则是无效的。 关于解释,这篇文章可以看看:https://blog.csdn.net/weixin_33725515/arti
  • having 用法与WHERE用法类似,但三点不同 1、HAVING只用于GROUP BY(分组统计语句), ...下面的语句统计用户表姓名为“李”(WHERE子句定义),出现多于一次(having 用聚合函数COUNT(1)定义)的
  • GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 ...where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
  • 数据库007

    2016-01-07 23:16:30
    而where 不能有聚合函数,且运行在分组过后。 sql语句执行顺序 select子句 from子句 where子句 group by子句 order by子句 having子句. 子查询  是嵌套在主查询的查询,也称内部查询,包含子查询的...
  • group by havding order by

    千次阅读 2012-08-05 14:35:15
    总结:1,在where子句中不能用分组聚合函数。  2,如果没有group by 子句,select 不能同时出现字段与分组的聚合函数。  3,在group by 的子句的查询中,select 查询的列 要么出现在group By子句中的字段。 ...
  • SQL 4. 数据分组 - 数据分组入门

    千次阅读 2011-01-25 12:52:00
    使用方式为“GROUP BY 分组字段 ” 注意: ...2. 需要分组的所有列都必须位于GROUP BY 子句的列名列表中,也就是没有出现在GROUP BY子句中的列(聚合函数除外)是不能放到 放到SELECT语句的列名表中的
  • PostgreSQL 聚合函数 ...最简单聚合函数count() ...%是LIKE搜索的通配符 ...group by,告诉postgres对行进行归类,然后...HAVING和WHERE子句类似,只不过它可以用聚合函数作为过滤条件(而WHERE不能) 也可以不带任何聚
  • mysql

    2017-03-22 22:31:02
    group by 子句可以包含任数目的字段group by 子句中每个列都是建所列或有效表达式(不能聚合函数)除了聚会计算语句之外,select语句中的每个列都必须在group中出现如果分组中null值,则分为一组group by 子句必须在...
  • 搜罗了网上的资料,加上自己测试的sql。 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合...where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能...
  • GrouBy

    2020-05-06 23:23:38
    一旦有 group by 子句,那么,在 select 子句中不能有(分组字段,聚合函数)以外的字段 聚合函数:max()、min()、avg()、sum()、count()、disctinct() 为什么 where 必须写在 group by 的前面,为什么 group...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

where子句中不能有聚合函数