`
gudujianxuehu
  • 浏览: 98230 次
  • 来自: ...
社区版块
存档分类
最新评论

[转]sql中Distinct、Group by、having、order by使用注意事项

阅读更多

SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY 
REQUEST,METHOD HAVING (REQUEST ='FC.OCEAN.JOB.SERVER.CBIZOZBKHEADER' OR REQUEST='FC.Ocean.Job.Server.CBizOzDocHeader')
AND COUNT(*) >3
ORDER BY REQUEST

如上语句的注意事项

HAVING后的条件不能用别名COUNT>3 必须使用COUNT(*) >3,否则报:列名 'COUNT' 无效。

having 子句中的每一个元素并不一定要出现在select列表中,如上面的语句可以写成:

SELECT REQUEST,METHOD FROM REQUESTMETH GROUP BY 
REQUEST,METHOD HAVING (REQUEST ='FC.OCEAN.JOB.SERVER.CBIZOZBKHEADER' OR REQUEST='FC.Ocean.Job.Server.CBizOzDocHeader')
AND COUNT(*) >3
ORDER BY REQUEST


SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY 
REQUEST,METHOD ORDER BY REQUEST

如果把该语句写成:

SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY 
REQUEST ORDER BY REQUEST

那么将报:

选择列表中的列 'REQUESTMETH.method' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

注意:
1、使用GROUP BY 子句时,SELECT 列表中的非汇总列必须为GROUP BY 列表中的项。
2、分组时,所有的NULL值分为一组。
3、GROUP BY 列表中一般不允许出现复杂的表达试、显示标题以及SELECT列表中的位置标号。

如:SELECT REQUEST,METHOD, COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY 
REQUEST,2 ORDER BY REQUEST   是错误的。

错误信息为:每个 GROUP BY 表达式都必须包含至少一个列引用。


SELECT COUNT(*) AS COUNT, MAX(BOOKID) AS MAXBOOKID,CATEGORYID FROM BOOK 
WHERE DOTNUMBER >10 GROUP BY CATEGORYID 
HAVING MAX(BOOKID) < 50
ORDER BY CATEGORYID


以上语句:先过滤出点击率大于10的,然后按类型(CATEGORYID )进行分组,再过滤出每组的最大值小于50个

行,最后进行按CATEGORYID进行排序。

 

GROUP BY 中使用 ORDER BY注意事项:

SELECT COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY REQUEST,METHOD ORDER BY REQUEST,METHOD
--这样是允许的, ORDER BY后面的字段包含在GROUP BY 子句中

SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNT(*) DESC 
--这样是允许的,ORDER BY后面的字段包含在聚合函数中,结果集同下面语句一样
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNTS DESC 
--这样是允许的,区别于HAVING,HAVING后不允许跟聚集函数的别名作为过滤条件

SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY METHOD
--这样是错误的:ORDER BY 子句中的列 "REQUESTMETH.method" 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。


SELECT DISTINCT 中使用 ORDER BY注意事项:

SELECT DISTINCT BOOKID FROM BOOK ORDER BY BOOKNAME

以上语句将报:

--如果指定了SELECT DISTINCT,那么ORDER BY 子句中的项就必须出现在选择列表中。


因为以上语句类似

SELECT BOOKID FROM BOOK GROUP BY BOOKID ORDER BY BOOKNAME

其实错误信息也为:

--ORDER BY子句中的列"BOOK.BookName" 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。


应该改为:SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK ORDER BY BOOKNAME


SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK

SELECT BOOKID,BOOKNAME FROM BOOK GROUP BY BOOKID,BOOKNAME


以上两句查询结果是一致的,DISTINCT的语句其实完全可以等效的转换为GROUP BY语句

分享到:
评论

相关推荐

    SQL 语法 SQL 总结 SQL教程

    SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL Inner Join SQL Left Join SQL Right Join SQL Full Join SQL ...

    group by用法.doc

    当需要去除重复值时,可以在聚合函数中使用`DISTINCT`,如`SELECT CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice) FROM Products WHERE UnitPrice &gt; 30 GROUP BY CategoryID ORDER BY CategoryID...

    group by 语法大全,内附列子

    - 当`GROUP BY`与`ORDER BY`一起使用时,`ORDER BY`子句应该放在`GROUP BY`之后。 通过以上示例可以看出,`GROUP BY`语句结合聚合函数在SQL查询中有着广泛的应用,可以帮助我们高效地处理复杂的数据分析任务。希望...

    详解SQL中Group By的用法

    在`GROUP BY`查询中,我们可以使用`ORDER BY`来排序结果,但需要注意的是`ORDER BY`应用于分组后的结果,而不是原始数据。例如: ```sql SELECT 类别, SUM(数量) AS 数量之和 FROM A GROUP BY 类别 ORDER BY ...

    分组查询GROUP BY的使用与SQL执行顺序的讲解

    如果使用了表达式,那么在GROUP BY中也需要指定相同的表达式,不能使用别名。 4. 除了聚集函数,SELECT语句中的每一列都需要在GROUP BY子句中明确给出。 5. 对于含有NULL值的分组列,NULL会被视为一个单独的分组,...

    MySQL中Distinct和Group By语句的基本使用教程

    在实际应用中,`DISTINCT`和`GROUP BY`可以结合其他关键字,如`HAVING`(用于过滤分组后的结果)和`ORDER BY`(用于排序结果),以实现更复杂的查询需求。了解这些基本操作对于有效管理和分析数据库中的数据至关重要...

    Excel_VBA+ADO+SQL入门教程_-_汇总.pdf

    在 SQL 中,我们可以使用 ORDER BY 语句来排序字段。例如,我们可以使用以下代码来排序字段: ```sql SELECT * FROM 表名 ORDER BY 字段 ASC ``` 条件查询 在 SQL 中,我们可以使用 WHERE 语句来实现条件查询。...

    sql 查询重复数据

    删除表中多余的重复记录可以使用以下 SQL 语句: ```sql DELETE FROM people WHERE peopleId IN (SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) &gt; 1) AND rowid NOT IN (SELECT ...

    SQL 重复函数 2005

    - **组合使用**:`DISTINCT`可以与其他SQL关键字如`GROUP BY`、`HAVING`等结合使用,实现更复杂的数据筛选和统计需求。 ```sql SELECT DISTINCT column1, SUM(column2) FROM table_name GROUP BY column1; ``` #...

    Oracle中分组查询group by用法规则详解

    - `GROUP BY`子句可以结合`DISTINCT`关键字用于消除重复行,但`DISTINCT`通常不与`GROUP BY`一起使用,因为`GROUP BY`本身就是用来分组去重的。 7. **扩展应用**: - `GROUP BY ROLLUP`用于创建分组的层次结构,...

    oracle sql 去重复记录不用distinct如何实现

    在上述示例中,对品牌名称字段进行`GROUP BY`和`HAVING`的平均时间是0.453秒,而使用`DISTINCT`的平均时间是0.39秒,这表明在某些情况下,两者的性能可能相差不大。 总的来说,Oracle SQL 中去除重复记录有多种方法...

    sql+如何去重复数据,数据库去重复数据

    对于更复杂的情况,可以使用子查询结合`GROUP BY`和`HAVING`来实现去重。这种方法通常用于处理需要按某些条件分组的数据。 **示例:** 假设我们要找出每个员工处理订单数量最多的日期: ```sql SELECT employee_id,...

    SQL进阶的部分使用.docx

    通过`ORDER BY`进行数据排序,利用`GROUP BY`和`HAVING`进行复杂的数据分组和筛选,以及借助`DISTINCT`消除重复,你可以构建出更复杂的查询,从而更有效地从海量数据中提取所需信息。在实际应用中,结合其他SQL函数...

    Proc SQL by Example, Using SQL within SAS

    介绍如何使用ORDER BY子句对查询结果进行排序。这包括如何按升序或降序排列,以及如何同时指定多个排序字段。 #### 2.10 消除重复项 讨论了如何去除查询结果中的重复行,通常涉及到DISTINCT关键字的使用。 #### ...

    LINQ to SQL手册

    6. **Group By/Having**:`Group By` 将数据按指定字段分组,`Having` 则用于在分组后过滤数据,类似 `WHERE` 但针对的是分组后的结果。 7. **Exists/In/Any/All/Contains**:这些谓词用于检查条件的存在性,如 `...

    SQL Server2005 技术内幕:T-SQL查询(笔记).docx

    2.查询执行步骤:包括 select、distinct、top_specification、from、join、on、where、group by、having、order by 等步骤,每一步骤都会产生一个虚拟表,并作为下一步骤的输入。但这些虚拟表对调用者不可用,只有...

    SQL Server视频教程(以2000为例,结合使用范例,深入浅出,图文并茂)

    本章的学习目标是让学生掌握如何使用T-SQL语句来操作数据库中的数据,包括但不限于数据库和表的操作,SELECT语句的基本结构,以及如何使用GROUP BY和ORDER BY子句,以及汇总函数的应用。 首先,SQL语言是数据库操作...

    SQL查询语句实用大全(适合SQL的初学者以及经常写SQL的人)

    - 只能在最后一个`SELECT`语句中使用`GROUP BY HAVING`子句。 - 示例:合并`[tstudentinfo]`表与`[tusersex]`表的信息,并按`userIdCard`降序排列。 ```sql SELECT x.userName, x.userIdCard FROM ...

    SQL专项练习-学生练习(ppt文档).ppt

    本资源摘要信息档案旨在帮助学生熟悉SQL语言的基本概念和操作,包括SELECT命令、GROUP BY子句、HAVING子句、ORDER BY子句、INSERT命令、UPDATE命令、DELETE命令、CREATE TABLE命令等。 知识点1:SELECT命令 ...

    SQL 提升SQL执行效率诀窍

    4. **GROUP BY与HAVING**:合理使用GROUP BY和HAVING,避免在结果集较大的情况下进行全局排序。 5. **避免子查询**:尽可能将子查询转换为JOIN操作,减少嵌套查询的复杂性。 6. **使用索引**:为常用查询创建合适的...

Global site tag (gtag.js) - Google Analytics