`
- 浏览:
378861 次
- 性别:
- 来自:
北京
-
group by、order by、where、distinct使用方法小结
一. group by
1.GROUP BY子句主要用于对WHERE中得到的结果进行分组,也就是说它是在WHERE子句之后执行,对经过WHERE筛选后的结果按照某些列进行分组,之后进行相应的处理工作。
注意:如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
eg: select agent_Code,count(domain_name) from service_domain group by agent_code
说明:统计代理商注册域名的个数
2.Group By All [expressions]
如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。
eg: select agent_Code,count(domain_name) from service_domain where agent_code != 'agent8175' group by all agent_code
说明:统计所有代理商注册域名的个数,如果没有all,则统计除agent8175之外的代理的注册域名的个数。
3.GROUP BY [Expressions] WITH CUBE | ROLLUP
首先需要说明的是Group By All 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。
cube指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。 结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。
这个定义可以这样理解:如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作(即GROUP BY(0))。即:CUBE操作字,除完成ROLLUP的功能外,再对ROLLUP后的结果集从右到左再聚合,逐个减少字段。CUBE常用于需要产生交叉报表的地方。
eg: select agent_Code,product_code,count(domain_name) from service_domain group by cube(agent_code ,product_code )
ROLLUP部分ROLLUP:你也可以使用Rollup包含有限的几个小计,其语法是:Group by A,Rollup(B,C)。这种情况下,group by 条款先计算rollup中的部分,然后加上非rollup的部分,故层次为(A,B,C)(A,B)(A)。这里去除A不看就是GROUP BY(B,C),GROUP BY(B),GROUP BY(0),刚好就是ROLLUP(B,C)部分,然后再加上A,就得到GROUP BY A,ROLLUP(B,C)。
eg: select agent_Code,product_code,count(domain_name) from service_domain group by rollup(agent_code ,product_code )
4.GROUPING SETS扩展
也就是通过它,你就可以控制GROUP BY后面的内容。举个例子来说,如果GROUP BY A,GROUPING SETS(B,C),那么实际上就想当于GROUP BY A,B UNION ALL GROUP BY A,C。
eg: select a,b,c,d,e,sum(c) sc from t group by a,grouping sets((b,c),(d,e));
5.having条件:
eg: select agent_Code,product_code,count(domain_name) from service_domain group by agent_code ,product_code having count(domain_name) > 4
二. distinct关键字 用于去重:
1.删除重复的数据DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。
eg:select distinct(domain_name),apply_date from service_domaindel
注意:distinct必须放在开头。
select * ,count(distinct domain_name) from service_domaindel group by domain_name 这个在mysql中支持,但是在oracle中不支持。
三. Group By 和 Having, Where ,Order by语句的执行顺序:
最后要说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如: SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount FROM T_TEST_FRUITINFO WHERE (ProductPlace = N'china') ORDER BY IDE 这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
当需要去除重复值时,可以在聚合函数中使用`DISTINCT`,如`SELECT CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice) FROM Products WHERE UnitPrice > 30 GROUP BY CategoryID ORDER BY CategoryID...
- 当`GROUP BY`与`ORDER BY`一起使用时,`ORDER BY`子句应该放在`GROUP BY`之后。 通过以上示例可以看出,`GROUP BY`语句结合聚合函数在SQL查询中有着广泛的应用,可以帮助我们高效地处理复杂的数据分析任务。希望...
这种等价性意味着适用于`GROUP BY`查询的优化方法同样适用于带有`DISTINCT`子句的查询。因此,对于`DISTINCT`查询的更多优化细节,可以参考[MySQL官方文档]...
这里的`OVER(PARTITION BY column1)`部分相当于`GROUP BY column1`,而`ORDER BY some_column`则确定了在每个组内如何选择记录。 在大数据量处理时,优化`GROUP BY`语句的写法至关重要,因为它直接影响到查询的效率...
- `GROUP BY`子句可以结合`DISTINCT`关键字用于消除重复行,但`DISTINCT`通常不与`GROUP BY`一起使用,因为`GROUP BY`本身就是用来分组去重的。 7. **扩展应用**: - `GROUP BY ROLLUP`用于创建分组的层次结构,...
6. GROUP BY子句的位置在WHERE子句之后,ORDER BY子句之前。 HAVING子句是与WHERE子句类似但用于过滤分组的,它在数据分组后对每个分组应用条件。WHERE子句则在数据分组前对原始行进行筛选。 在使用GROUP BY时,...
使用group by关键字也可以取得不重复的值,例如:Select name from Lin_test group by name功能同distinct,但group by的条件必须是查找出来的所有的元素。使用distinct后,Oracle就会在查找的时候对后面的字段进行...
在MySQL中,`DISTINCT`和`GROUP BY`...总之,理解`DISTINCT`和`GROUP BY`的使用场景和它们如何与聚合函数协同工作是优化MySQL查询和处理重复数据的关键。正确地运用这些工具可以有效地提升查询性能和数据处理的准确性。
本文将详细讲解标准SQL语句的语法和使用方法,包括SELECT语句、FROM子句、WHERE子句、GROUP BY子句、HAVING子句和ORDER BY子句等。 一、SELECT语句 SELECT语句是SQL语言中最基本的语句,用于从数据库表中检索数据...
在`GROUP BY`查询中,我们可以使用`ORDER BY`来排序结果,但需要注意的是`ORDER BY`应用于分组后的结果,而不是原始数据。例如: ```sql SELECT 类别, SUM(数量) AS 数量之和 FROM A GROUP BY 类别 ORDER BY ...
实验训练2:数据查询操作 本实验训练的主要目的是...本实验训练让我们学习了如何使用 MySQL 中的各种查询语句来对数据进行查询和统计,包括单表查询、多条件查询、DISTINCT、ORDER BY、GROUP BY 和聚合函数查询等。
6. 使用`WHERE`和`YEAR()`函数筛选特定年份,`SELECT customer_id, SUM(order_amount) FROM orders WHERE YEAR(order_date) = 1996 GROUP BY customer_id`。 7. `HAVING`子句用于过滤`GROUP BY`后的结果,如`SELECT ...
- **语法**:`SELECT column_name(s), aggregate_function(s) FROM table_name GROUP BY column_name(s) HAVING condition` - **示例**:计算`Store_Information`表中销售额大于$2000的城市。 ```sql SELECT store...
对于更复杂的情况,可以使用子查询结合`GROUP BY`和`HAVING`来实现去重。这种方法通常用于处理需要按某些条件分组的数据。 **示例:** 假设我们要找出每个员工处理订单数量最多的日期: ```sql SELECT employee_id,...
SQL语句:select * from (select name, year b1, lead(year) over (partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over( partition by name order by year) rk ...
若要进行降序排列,可以使用`DESC`关键字,如`SELECT * FROM table ORDER BY column DESC`,这将按`column`的值从大到小排列记录。 其次,`GROUP BY`与`HAVING`是处理分组数据的重要工具。`GROUP BY`关键字用于将...
数据库系统概论:关系数据库标准语言——SQL语言 数据库系统概论的第四章中,关系数据库标准...用户可以使用 SELECT 语句来实现各种查询操作,并使用 WHERE、GROUP BY、HAVING、ORDER BY 等子句来实现复杂的查询操作。
本资源摘要信息档案旨在帮助学生熟悉SQL语言的基本概念和操作,包括SELECT命令、GROUP BY子句、HAVING子句、ORDER BY子句、INSERT命令、UPDATE命令、DELETE命令、CREATE TABLE命令等。 知识点1:SELECT命令 ...
本文将详细介绍三种在MySQL中实现去重查询的方法:使用DISTINCT、GROUP BY以及使用开窗函数ROW_NUMBER()或其类比方法。 ### 一、使用DISTINCT DISTINCT关键字是SQL中最常见的去重方式,它会返回所有不同的记录。...