空值被视为最低的可能值。
5 where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
6 having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
7 group by 指定用来放置输出行的组。
(1) 使用了聚合函数
如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每组的汇总值,选择列表中任意非聚合表达式内的所有列都应包含在 GROUP BY 列表中。
(1) 未使用聚合函数
GROUP BY 表达式必须与选择列表表达式完全匹配。
---------------------------------------------------------------------
8 group by , order by
看这个帖子:
select ProductType_T from T_ProductType group by ProductType_T order by ProductType_ID
这句为什么是错的么?
因为group by分组是把某字段相同的记录合并,但是ProductType_T相同并不意味着ProductType_ID就相同,那么加一个order by ProductType_ID的话,SQL分析器根本不知道是用哪个ProductType_ID来排序。加上聚合函数就OK了,如下:
select ProductType_T from T_ProductType group by ProductType_T order by max(ProductType_ID)
或者
select ProductType_T from T_ProductType group by ProductType_T order by min(ProductType_ID)
16 楼neilzhlei(半瓶子软件)回复于 2005-06-23 09:23:45 得分 2
select ProductType_T
from T_ProductType
group by ProductType_T,ProductType_ID
order by ProductType_ID
id只需要出现在聚合函数中或group by子句中就可以了。
9 on 与 where
on 是连接条件。如 A.ID=B.ID
where 是查询条件。如 B.OTHERKEY=XXXX
---------------------------------------------------------------------
用左/右联系时, 如果把"关联等式"和限制条件都写到on中会怎么样?而且我不写where子句了?
在这里on和where具体怎么理解?
ON条件是可以用在一个WHERE子句形式的任何条件
历史问题
--------------------------------------------------------
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX
与
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID AND B.OTHERKEY=XXXX
是不一样的
后者相当于
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX OR B.OTHERKEY IS NULL
10 执行顺序
1)根据where字句选择行。
2)根据group by 组合行。
3)为每个组计算分组函数的结果。
4)根据having by 选择和排除组。
5)根据order by 字句中的分组函数的结果对足进行排序。order by 字句必须使用分组函数或者使用在group by 字句中指定的列。也就是说如果在order by 字句中指定了不是分组函数一部分的一个列,那么它肯定在group by字句中。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
求教一个关于 DISTINCT 和 order by id失效的问题
版块:[MS-SQL Server 疑难问题] 日期:2007-5-28 分值:20分回复:9人 [原文] [举报]
提问:
问者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 17:51:43
select distinct top 4 [b2c_z].to_user_un,[user].user_logo,[b2c_z].id from [b2c_z],[user] where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' order by [b2c_z].id desc 加了ORDER BY的话 就有重复值了 请问大家怎么办(在不用临时表的前提下) 谢谢指教
回复:
答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 17:57:17 id:41076436
Try: select top 4 from ( select distinct [b2c_z].to_user_un,[user].user_logo, [b2c_z].id from [b2c_z],[user] where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' ) as t order by id desc
答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:01:29 id:41076519
谢谢楼上的 但是有错误 服务器: 消息 156,级别 15,状态 1,行 1 在关键字 'from' 附近有语法错误。 服务器: 消息 156,级别 15,状态 1,行 1 在关键字 'as' 附近有语法错误。
答者:lwl0606(寒泉) 信誉:100 级别:user5 日期:2007-5-28 18:01:32 id:41076521
看起来没问题,你想取什么数据?加了order by 后先按 [b2c_z].id 排序 ,然后取出 前4 行,前提是记录不重复的情况下排序的,[b2c_z].id 这一列可能会有重复,不会 三列都重复吧
答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:04:39 id:41076562
少写了* select top 4 * from ( select distinct [b2c_z].to_user_un,[user].user_logo, [b2c_z].id from [b2c_z],[user] where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' ) as t order by id desc
答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:05:23 id:41076570
回楼上 ID是自动编号 我是想按最新的来排序 加了ORDER BY ID 重复值就过滤不掉了
答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:06:44 id:41076583
扬帆破浪 你好,用了你的SQL 查询出来还是有重复值
答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:41:05 id:41076952
... 看来你要说清楚你希望的不重复是指[b2c_z].to_user_un,[user].user_logo,[b2c_z].id 三个字段的组合不重复还是哪个单个子字段不重复
答者:Yang_(扬帆破浪) 信誉:132 级别:star4 日期:2007-5-28 18:44:06 id:41076984
估计是要求[b2c_z].to_user_un,[user].user_logo组合不重复,可以这样 select top 4 [b2c_z].to_user_un,[user].user_logo,max([b2c_z].id) as id from [b2c_z],[user] where [b2c_z].to_user_un=[user].user_un and [user].user_sex='女' and [user].user_logo_yn='1' group by [b2c_z].to_user_un,[user].user_logo order by max([b2c_z].id)
答者:bbfang() 信誉:100 级别:user1 日期:2007-5-28 18:48:39 id:41077025
扬帆破浪 谢谢你 问题解决了 高手哦 呵