`

关于group by

 
阅读更多
1.错误的sql语句:此sql语句报错信息是:group by 后面的标识符无效(字段名无效)
错误原因:因为使用了子查询,而group by后面是子查询的别名,所以无效。
先后顺序:1.where条件 , 2分组,3.集合函数(或者子查询),4.having筛选
反推理解:由于用了sum集合函数,所以子查询报错了,因此说明集合函数和子查询是同一个档次的(同时执行)
注意:查询中的执行步骤:先分组,在聚合,最后筛选。。。(where ,分组,集合函数,筛选)
 

select
t1.fund_id,
(select name from T_PUBMOFDEPT where id=t.zg_dept_id) DEPT_NAME,
(select name from t_pubagency where id=t.agency_id) AGENCY_NAME,
t.annual,
t.item_name,
(select name from T_PUBBDGSOURCE where id=t1.bdgsrc_id) BDGSRC_NAME,
(select name from T_PUBBGTSOURCE where id=t1.bgtsrc_id) BGTSRC_NAME,
(select name from T_PUBFUNDTYPE where id=t1.fundtype_id) FUNDTYPE_NAME,
(select name from t_pubexpfunc where id=t.expfunc_id) EXPFUNC_NAME,
sum(t1.amount) amount,
(select  BGT_FILE_NO from TB_BGT_DEPT_BGTFILE where BGT_FILE_ID=t.bgt_file) BGT_FILE,
t.super_rev_file,
t.rev_file,
(select  name  from T_PUBFUNDCLASS where id=(select FUNDCLASS_ID from tb_bgt_item where ITEM_ID=t.item_id)) FUNDCLASS_NAME,
(select name from T_PUBEXPECONORMIC where id=(select eco_id from tb_bgt_fund where id=t1.fund_id)) ECO_NAME,
(select  name  from T_PUBPROTYPE where id=(select PROTYPE_ID from tb_bgt_item where ITEM_ID=t.item_id)) PROTYPE_NAME,
t.sn,
(select name from T_PUB_COUNTY_DISP where id=t.county_disp_id) COUNTY_DISP_NAME,
(select name from T_PUBBASESVR where id=t.basesvr_id) BASESVR_NAME,
t.ANNOTATION
from tb_bgt_item_info t
left join TB_BGT_ITEM_AMOUNT_SUB t1
on t.ITEM_ID=t1.item_ls_id
where 1=1
and t.annual=2016
group by fund_id,DEPT_NAME,AGENCY_NAME,item_name, BDGSRC_NAME,BGTSRC_NAME,FUNDTYPE_NAME,EXPFUNC_NAME,
BGT_FILE,super_rev_file,rev_file,FUNDCLASS_NAME,ECO_NAME, PROTYPE_NAME,sn,COUNTY_DISP_NAME,BASESVR_NAME,ANNOTATION
 
2.正确的sql语句:
修改过程:现在group by后面不是子查询的别名了,而是子查询里面的表的某个字段
注意:还添加了CKLW字段,这个字段没写在group by后面竟然没报错
没报错的原因:因为这一行里面有REV_FILE 字段
select
case when t.REV_FILE is not null then '允许' else '不允许' end IS_CKLW,
t1.fund_id,
(select name from T_PUBMOFDEPT where id=t.zg_dept_id) DEPT_NAME,
(select name from t_pubagency where id=t.agency_id) AGENCY_NAME,
t.annual,
t.item_name,
(select name from T_PUBBDGSOURCE where id=t1.bdgsrc_id) BDGSRC_NAME,
(select name from T_PUBBGTSOURCE where id=t1.bgtsrc_id) BGTSRC_NAME,
(select name from T_PUBFUNDTYPE where id=t1.fundtype_id) FUNDTYPE_NAME,
(select name from t_pubexpfunc where id=t.expfunc_id) EXPFUNC_NAME,
sum(t1.amount) amount,
(select  BGT_FILE_NO from TB_BGT_DEPT_BGTFILE where BGT_FILE_ID=t.bgt_file) BGT_FILE,
t.super_rev_file,
t.rev_file,
(select  name  from T_PUBFUNDCLASS where id=(select FUNDCLASS_ID from tb_bgt_item where ITEM_ID=t.item_id)) FUNDCLASS_NAME,
(select name from T_PUBEXPECONORMIC where id=(select eco_id from tb_bgt_fund where id=t1.fund_id)) ECO_NAME,
(select  name  from T_PUBPROTYPE where id=(select PROTYPE_ID from tb_bgt_item where ITEM_ID=t.item_id)) PROTYPE_NAME,
t.sn,
(select name from T_PUB_COUNTY_DISP where id=t.county_disp_id) COUNTY_DISP_NAME,
(select name from T_PUBBASESVR where id=t.basesvr_id) BASESVR_NAME,
t.ANNOTATION
from tb_bgt_item_info t
left join TB_BGT_ITEM_AMOUNT_SUB t1
on t.ITEM_ID=t1.item_ls_id
where 1=1
and t.annual=2016
group by fund_id,t.zg_dept_id,t.agency_id,annual,item_name,t1.bdgsrc_id,t1.bgtsrc_id,t1.fundtype_id,t.expfunc_id,
t.bgt_file,super_rev_file,rev_file,t.item_id,t1.fund_id,sn,t.county_disp_id,t.basesvr_id,ANNOTATION
分享到:
评论

相关推荐

    group by + order by

    ### Group By 和 Order By 的使用方法及组合应用 在数据库查询语言 SQL(Structured Query Language)中,`GROUP BY` 和 `ORDER BY` 是两个非常重要的子句,它们可以帮助我们更高效地管理和展示数据。 #### GROUP ...

    SQL中GROUP BY的用法

    SQL 中 GROUP BY 的用法及聚合函数 GROUP BY 是 SQL 中的一种分组查询语句,通常与聚合函数配合使用。GROUP BY 语句根据一个或多个列将查询结果分组,并对每组计算聚合函数的值。 在使用 GROUP BY 语句时,需要...

    mysql使用GROUP BY分组实现取前N条记录的方法

    本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...

    Flink之 group by

    1、 如果使用 groupby table转换为流的时候只能用toRetractDstream val rDstream: DataStream[(Boolean, (String, Long))] = table.toRetractStream[(String,Long)] 2、 toRetractDstream 得到的第一个boolean型...

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    group by的详解

    在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...

    MySQL数据库中group by语句与update语句的用法研究.pdf

    MySQL 数据库中 group by 语句与 update 语句的用法研究 本论文对 MySQL 数据库中的 group by 语句和 update 语句进行了深入研究,讨论了这些语句在数据库查询和修改中的应用,并给出了具体的解决方案。 一、MySQL...

    order by 、group by 、having的用法

    在SQL查询中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是三个非常重要的子句,它们分别用于不同的数据处理操作。 1. **ORDER BY** 子句: - `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。...

    清晰解读GroupBy

    ### 清晰解读Group By:理解SQL中的分组与聚合 在数据库查询语言SQL中,`GROUP BY`是一个非常重要的概念,它可以帮助我们对数据进行分组并执行聚合操作,从而得出更有价值的信息。本文将从`GROUP BY`的基础概念出发...

    Group_by详解_完美例句

    【Group_by 详解】 在数据库查询中,`GROUP BY`语句是一个至关重要的部分,它允许用户根据指定的字段或表达式对数据进行分组,以便进行聚合计算或按组进行分析。`GROUP BY`的基本概念是将具有相同字段值的数据行...

    处理group by 查询速度慢的问题.docx

    ### 处理GROUP BY 查询速度慢的问题 在实际项目中,由于数据表的记录数量庞大,经常遇到查询速度缓慢的问题。本文将详细记录一次针对GROUP BY查询效率低下的排查及优化过程,希望能够对读者有所帮助。 #### 问题...

    Lucene group by ,分组实现

    "Lucene group by" 指的就是在 Lucene 中实现基于特定字段的分组操作,类似于 SQL 中的 GROUP BY 子句。这使得用户能够按类别聚合文档,例如,根据作者、日期或其他分类标准来查看搜索结果。 在 Lucene 中,分组...

    SQL GROUP BY 语句

    SQL GROUP BY 语句 SQL GROUP BY 语句

    SQL GROUP BY 语句详解

    SQL GROUP BY 语句是数据库查询中非常重要的一个部分,它允许我们对数据进行分组,以便于统计和分析。在处理大型数据集时,GROUP BY 与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,能够帮助我们汇总数据,...

    处理group by 查询速度太慢的问题 数据量大.doc

    优化 Group By 查询速度的实践经验 在实际项目中,遇到了表数据量大导致查询速度很慢的问题。通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 ...

    Sql聚合函数和group by的关系详解.doc

    Sql 聚合函数和 group by 的关系详解 Sql 聚合函数和 group by 是 SQL 语言中两个非常重要的概念,它们之间存在紧密的联系。那么,什么是聚合函数?什么是 group by?它们之间的关系是什么?在本文中,我们将详细地...

    简单讲解sql语句中的group by的使用方法

    SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...

    group by 后 使用 rollup 子句 总结.doc

    - 对于 `GROUP BY CUBE(A, B)`,产生的分组包括:`GROUP BY A, B`、`GROUP BY A`、`GROUP BY B` 和 `GROUP BY NULL`。 相比之下,`ROLLUP` 会按照层次递减的方式生成分组,只包括:`GROUP BY A, B`、`GROUP BY A` ...

    group by后使用rollup子句总结

    「GROUP BY 与 ROLLUP 子句的使用」 `GROUP BY` 语句是 SQL 中一种常用的语句,用来对查询结果进行分组并进行聚合操作。但是,如果我们想要对分组结果进行汇总统计时,使用 `ROLLUP` 子句可以实现这一功能。 ...

Global site tag (gtag.js) - Google Analytics