首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这句SQL话语,不能理解

2012-08-24 
这句SQL语句,不能理解要求统计每个客户下的订单总数:这句能理解:SELECT 客户表.姓名,COUNT(*) AS 订单总数

这句SQL语句,不能理解
要求统计每个客户下的订单总数:

这句能理解:

SELECT 客户表.姓名,COUNT(*) AS 订单总数
FROM 客户表,订单主表 
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名

这句不能理解:

SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表,订单主表 
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名


问题:
上面那句我能理解,按照姓名分组,然后统计每个组的个数,第二句我不能理解,每个组为什么就能统计“订单主表.客户编号”的总数。
按照SQL Server帮助文档里面说的:
聚合函数每个组进行聚集;
SELECT 子句列表中的聚合函数提供有关每个组(而不是各行)的信息

分组是按照“客户表.姓名”分组的,怎么能说明COUNT(订单主表.客户编号)就是每个组的信息啊?COUNT(订单主表.客户编号)不是整个订单主表吗?

实在不能理解.........

[解决办法]
你这两个结果有区别吗
[解决办法]

SQL code
--SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数FROM 客户表,订单主表  WHERE 客户表.客户编号 = 订单主表.客户编号group by 客户表.姓名--SELECT 客户表.姓名,COUNT(1) AS 订单总数FROM 客户表,订单主表  WHERE 客户表.客户编号 = 订单主表.客户编号group by 客户表.姓名--SELECT 客户表.姓名,COUNT(*) AS 订单总数FROM 客户表,订单主表  WHERE 客户表.客户编号 = 订单主表.客户编号group by 客户表.姓名
[解决办法]
count是表联合之后 基于group By的字段统计 和count里面的内容没关系 count(1) 也都可以
[解决办法]
GROUP BY就可以分组了 。。

COUNT(订单主表.客户编号)是求的分组后的信息。
[解决办法]
SQL code
SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、使用order by对结果集进行排序。 另外:一个查询语句各个部分的执行顺序: --8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> --(1)  FROM <left_table> --(3)    <join_type> JOIN <right_table> --(2)      ON <join_condition> --(4)  WHERE <where_condition> --(5)  GROUP BY <group_by_list> --(6)  WITH {CUBE | ROLLUP} --(7)  HAVING <having_condition> --(10) ORDER BY <order_by_list>
[解决办法]
但这个是不同的,这个结果会是0,count(null)这是个很有用处的东西,以后很多地方你都会用到的
,可以简化很多语句
SQL code
SELECT 客户表.姓名,COUNT(null) AS 订单总数--此处为0FROM 客户表,订单主表  WHERE 客户表.客户编号 = 订单主表.客户编号group by 客户表.姓名
[解决办法]
如果单是一个语句

select count(*) from tb
select count(字段) from tb --这个会过滤掉null值

但是你的语句是一个内连接,join的时候已经过滤了客户编号 为null的

所以结果肯定是一样的
[解决办法]
分组是这样的 假如你join 后的数据是
name 订单
张三 订单1
张三 订单2
张三 订单3 
李四 订单1
李四 订单2

group by name 就是按照name 分组 那么一样的是一组
张三就是一组了,那么张三出现的次数也就是count 的结果
也是订单次数


这下总该明白了吧
[解决办法]
楼主是不明白group by的用法? 楼上已经解释了,看明白了
[解决办法]
探讨

引用:

count是表联合之后 基于group By的字段统计 和count里面的内容没关系 count(1) 也都可以

和COUNT里面的内容有关系吧,比如,下面两句:

SELECT 客户表.姓名,COUNT(客户表.客户编号) AS 订单总数
FROM 客户表 LEFT JOIN 订单主表
ON 客户表.客户编号 = 订单主表.客户编号
group……

[解决办法]
探讨

我就是能理解
SELECT 客户表.姓名,COUNT(客户表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名




不能理解:
SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.……

------解决方案--------------------


订单主表.客户编号 是主键 
count(*)和count(订单主表.客户编号)是一个效果的
[解决办法]
订单主表.客户编号 是主键

count(*)和count(订单主表.客户编号)是一个效果的

热点排行