要求统计每个客户下的订单总数:这句能理解:SELECT 客户表.姓名,COUNT(*) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名这句不能理解:SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
问题:
上面那句我能理解,按照姓名分组,然后统计每个组的个数,第二句我不能理解,每个组为什么就能统计“订单主表.客户编号”的总数。
按照SQL Server帮助文档里面说的:
聚合函数每个组进行聚集;
SELECT 子句列表中的聚合函数提供有关每个组(而不是各行)的信息分组是按照“客户表.姓名”分组的,怎么能说明COUNT(订单主表.客户编号)就是每个组的信息啊?COUNT(订单主表.客户编号)不是整个订单主表吗?实在不能理解.........
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 客户表.姓名这几个是一样的,只是写法不同,在聚合函数内的字段不需出现在group by中,但不在聚合函数内的字段
必须出现在group by 中
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>
,可以简化很多语句SELECT 客户表.姓名,COUNT(null) AS 订单总数--此处为0
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
select count(字段) from tb --这个会过滤掉null值但是你的语句是一个内连接,join的时候已经过滤了客户编号 为null的所以结果肯定是一样的
name 订单
张三 订单1
张三 订单2
张三 订单3
李四 订单1
李四 订单2group by name 就是按照name 分组 那么一样的是一组
张三就是一组了,那么张三出现的次数也就是count 的结果
也是订单次数
这下总该明白了吧
FROM 客户表 LEFT JOIN 订单主表
ON 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表 LEFT JOIN 订单主表
ON 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
上面两句的输出结果就不一样
SELECT 客户表.姓名,COUNT(客户表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
不能理解:
SELECT 客户表.姓名,COUNT(订单主表.客户编号) AS 订单总数
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
group by 客户表.姓名
count(字段) 过滤了null你要是真不理解 执行下面的语句 看结果去理解SELECT 客户表.姓名,客户表.客户编号,订单主表.客户编号
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号SELECT 客户表.姓名,客户表.客户编号,订单主表.客户编号
FROM 客户表 LEFT JOIN 订单主表
ON 客户表.客户编号 = 订单主表.客户编号
count(*)和count(订单主表.客户编号)是一个效果的