这句SQL语句,不能理解
要求统计每个客户下的订单总数:
这句能理解:
SELECT 客户表.姓名,COUNT(*) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
这句不能理解:
SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
问题:
上面那句我能理解,按照姓名分组,然后统计每个组的个数,第二句我不能理解,每个组为什么就能统计“订单主表.客户编号”的总数。
按照SQL Server帮助文档里面说的:
聚合函数每个组进行聚集;
SELECT 子句列表中的聚合函数提供有关每个组(而不是各行)的信息
分组是按照“客户表.姓名”分组的,怎么能说明COUNT(订单主表.客户编号)就是每个组的信息啊?COUNT(订单主表.客户编号)不是整个订单主表吗?
实在不能理解.........
[解决办法]
你这两个结果有区别吗
[解决办法]
--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 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)这是个很有用处的东西,以后很多地方你都会用到的
,可以简化很多语句
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的用法? 楼上已经解释了,看明白了
[解决办法]