`
liusu
  • 浏览: 171505 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL Group By测试和理解

    博客分类:
  • Java
阅读更多
Orders数据如下:


SQL GROUP BY的作用:
The SQL GROUP BY statement is used along with the SQL aggregate functions like SUM to provide means of grouping the result dataset by certain database table column(s). Seehttp://www.sql-tutorial.net/SQL-GROUP-BY.asp

GROUP BY用于和SQL聚合函数(类似SUM)一起按照给定的数据表列给查询结果集合分组的。

一个必须注意的地方是:SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是聚合函数列。

仔细想想应该是这样理解的(为方便测试,贴SQL语句)
--SELECT * FROM "Orders";
--SELECT "Customer","OrderDate",SUM("OrderPrice") FROM "Orders" GROUP BY "OrderDate";
--SELECT "Customer","OrderDate",SUM("OrderPrice") FROM "Orders" GROUP BY "OrderDate";
--上面的语句报错:
--ERROR: column "Orders.Customer" must appear in the GROUP BY clause or be used in an aggregate function
--SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数。 
--原因:Group by会将结果集合并。上面的SELECT结果根据OrderDate合并集合。
--假设没有上面那个限制,会出现如下的冲突情况:记录3和记录7的OrderDate都是2008/07/21,将他们按照SUM(OrderPrice)求得值为1700,如果SELECT列中允许
--出现Customer列(一个不出现在Group By中的列),那么这条记录的Customer列的值应该显示什么呢?是Carter(7)还是Bush(3)呢?
--所以:SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数。 

--使用聚合函数必须结合Group By子句来使用。
--SELECT "Customer",SUM("OrderPrice") from "Orders";
--上面的语句报错:
--ERROR: column "Orders.Customer" must appear in the GROUP BY clause or be used in an aggregate function
--错误的理解过上面的一致。在不给定Group BY条件的情况下,SUM("OrderPrice"),这个聚合函数默认使用所有记录。同样会出现CUSTOMER冲突的情况。


--SELECT "Customer","OrderDate",SUM("OrderPrice") FROM "Orders" GROUP BY "OrderDate","Customer";
--上面这句select查询时可以跑的。但是只Group by了OrderDate,至于Customer为什么给忽略掉了,不明白。也想不通“正确执行”下来会是什么结果。
SELECT "Customer","OrderDate",SUM("OrderPrice") FROM "Orders" GROUP BY "Customer","OrderDate"
--Group by的条件换了一下顺序,Customer放在前面,查询的结构是一样的。奇怪了。Customer,OrderDate的优先级别是什么?




  • 大小: 33.9 KB
分享到:
评论
4 楼 飞天奔月 2014-07-03  
mysql没这个限制
3 楼 donghustone 2013-03-23  
[size=small]"SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数。汗~"貌似在mysql中没有这个限制呢。。。。。。亲身验证过。。。。  [/size]
2 楼 liusu 2009-11-26  
select a.NEW_RO_SO_CASE,'' as testcol,count(*)
    from vedvr_master a,ve_issue_letter b,ve_letter_dvr c
    where a.dvr_id = c.dvr_id
    and c.letter_id = b.letter_id
    group by a.NEW_RO_SO_CASE,b.LETTER_TYPE_CODE

'' as testcol可能因为没有数据所以允许出现吧

另外测试的环境是postgresql,你是在postgresql里面测试的吗?
1 楼 pyzheng 2009-11-25  
一个必须注意的地方是:SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是聚合函数列。
-----------------------------------
select a.NEW_RO_SO_CASE,'' as testcol,count(*)
    from vedvr_master a,ve_issue_letter b,ve_letter_dvr c
    where a.dvr_id = c.dvr_id
    and c.letter_id = b.letter_id
    group by a.NEW_RO_SO_CASE,b.LETTER_TYPE_CODE

运行没问题



select PARENT_DVR_ID,
(select ENG_DESC from VE_DEFECT_GROUP where DEFECT_GROUP_CODE = a.DEFECT_GROUP_CODE1) as DEFECT_GROUP_DESC,
count(*)
from vedvr_master a  group by PARENT_DVR_ID,DEFECT_GROUP_DESC
------------------
却有问题呢?

我的疑问是:
第一句:b.LETTER_TYPE_CODE没有出现在select的列表中,却能运行。同时,testcol可有可无  一样能运行
第二节:DEFECT_GROUP_DESC出现在select列表中  为什么又运行不了?
我想是不是一定是出现在from的tables的列表中才对啊?

相关推荐

    SQL语句中Group BY 和Rollup以及cube用法

    ### SQL语句中Group BY 和Rollup以及...通过以上示例和解释,我们可以更好地理解SQL中`GROUP BY`、`ROLLUP`和`CUBE`的作用和用法。在实际工作中,根据需求选择合适的分组方式能够有效地提高数据处理的效率和灵活性。

    SQL语句测试SQL语句测试SQL语句测试

    通过阅读和执行这些语句,开发者可以加深对SQL的理解,并提升在实际项目中的应用能力。 总的来说,SQL语句测试是软件开发过程中的关键环节,尤其在数据驱动的应用程序中。它确保了数据库操作的准确性、稳定性和效率...

    sql数据库内部测试题

    在IT行业中,SQL(Structured Query Language)是一种用于管理和处理关系型数据库的标准编程语言。这篇“sql数据库内部测试题”很可能是...通过这样的测试,学习者可以系统地评估自己在SQL数据库方面的理解和应用能力。

    SQL内部测试题2答案

    通过北大青鸟的SQL测试,你可以检验自己对这些关键概念的理解和应用能力。在准备过程中,不仅要理解这些概念,还要通过实践操作来增强你的SQL技能。解压缩文件“SQL内部测试题2”,并仔细研究其中的答案,可以帮助你...

    SQL测试题目(面试经典)

    准备这类题目时,应注重理解和实践,以便在实际工作中灵活运用。 总的来说,掌握SQL测试题目不仅需要理论知识,还需要大量的实践和问题解决经验。通过解题,可以提升对SQL的理解,更好地应对面试挑战,为职业生涯...

    Oracle SQL 测试题目

    Oracle SQL 是一种强大的数据库查询语言...以上是对测试题目中涉及的Oracle SQL知识的详细解释,涵盖了统计、联接、子查询、排序、转换函数、序列和约束等核心概念。这些知识点对于理解并有效使用Oracle SQL至关重要。

    sql面试题(适合软件测试)

    根据提供的文件内容,我们可以整理出以下几个SQL面试题及其解答,这些问题主要聚焦于SQL查询技巧、数据处理以及数据结构的理解。 ### 1. 查询每门课都大于80分的学生姓名 **题目描述**:给定一张成绩表,其中包含...

    测试中需要用到的sql语句

    对于测试新人来说,掌握基本的SQL操作是必要的技能,因为这将帮助他们有效地验证数据的正确性,理解系统行为,以及进行故障排查。下面将详细介绍一些在测试中常用的SQL语句。 1. **SELECT语句**:这是最基础的查询...

    sql语句教程(包括比较难理解的group by以及having指令的使用)

    本教程旨在提供一个全面且深入的SQL知识框架,帮助读者更好地理解和掌握SQL的基本操作及其高级应用。我们将特别关注那些较为复杂的SQL指令,如`GROUP BY`和`HAVING`等。 #### 二、SQL基础指令详解 ##### 1. SELECT...

    accp 5.0 s2 sql内部测试题3

    这个测试旨在检验学员对SQL语言的理解程度,包括但不限于数据查询、表的操作、数据库设计以及SQL语句的编写能力。下面我们将深入探讨SQL语言中的关键知识点。 1. **数据查询**:SQL的核心功能之一是查询数据。使用`...

    oracle数据库测试sql文件.zip

    建议按照文件顺序逐一运行并理解每个脚本的作用,遇到问题时查阅相关文档或在线资源,以加深对Oracle SQL的理解和应用能力。同时,实际操作和动手实践是学习数据库知识的关键,这将帮助你在理论知识与实际技能之间...

    oracle PL/SQL测试题目和详细答案

    ### Oracle PL/SQL测试题目与知识点解析 #### 一、选择题知识点解析 **1. Oracle数据库中为新创建的表分配的初始空间通常为多大?...通过理解和掌握这些知识点,可以帮助开发者更好地进行数据库设计和开发工作。

    sql查询练习 测试题 含脚本 含测试数据

    - 使用`INSERT INTO`语句向各个表中添加数据,如学生、课程和成绩等,这对于理解和测试SQL查询至关重要。 3. **SQL查询基础**: - **SELECT语句**:用于从表中选取数据,例如查询所有学生的姓名、班级,或查询某...

    ORA-00979 不是group by 表达式

    - 了解SQL的聚合函数和GROUP BY子句的基本用法是数据库操作的基础。 - 多做练习,尝试不同的查询结构,熟悉错误提示,有助于提高SQL技能。 通过以上解释,你应该能够理解ORA-00979错误的原因,以及如何修正它。在...

    SQL基本功测试题与参考答案

    SQL,全称Structured Query Language,是用于管理关系数据库的标准语言。这个压缩包文件"SQL基本功测试题与参考答案"包含了一系列...同时,提供的参考答案将帮助他们检查自己的理解和解答是否正确,进一步巩固SQL技能。

    SQL2005内部测试题

    本测试题集旨在全面覆盖SQL2005中的各种知识点,帮助用户深入理解和掌握其核心功能。以下是对这些知识点的详细解释: 1. **SQL基础语法**:包括SELECT语句的使用,如查询单个或多个字段,使用WHERE子句进行条件筛选...

    SQL常用测试题。。。。。

    在SQL的世界里,掌握基本和高级的查询...理解并熟练应用这些技巧对于数据库管理和数据分析至关重要。在实际工作中,SQL是数据处理的核心工具,能够高效地进行数据提取、转换和加载(ETL)任务,以及复杂的业务分析。

    北大青鸟S2T-SQL内部测试机试题

    2. **数据查询**:测试可能包含使用`SELECT`语句进行复杂查询,包括子查询、联接(JOINs)、聚合函数(如`SUM`, `AVG`, `COUNT`, `MIN`, `MAX`)以及分组(GROUP BY)和排序(ORDER BY)。 3. **数据插入、更新和...

    H2 数据库 sql在线测试平台

    总的来说,这个“H2数据库SQL在线测试平台”是一个方便的学习和测试工具,可以帮助用户深入理解和掌握SQL语言,同时利用H2数据库的灵活性和Java的便利性,实现快速的测试和验证。无论是对于SQL新手还是专业人士,...

    MySql版本问题sql_mode=only_full_group_by的完美解决方案

    总的来说,`sql_mode=only_full_group_by`的解决方案不仅涉及技术操作,还涉及到对SQL标准的理解和代码质量的提升。正确处理这一问题有助于提高代码的健壮性和数据库的稳定性。在实际应用中,应结合业务需求和数据库...

Global site tag (gtag.js) - Google Analytics