日期:2014-05-17 浏览次数:20545 次
-- 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 订单总数--此处为0 FROM 客户表,订单主表 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的用法? 楼上已经解释了,看明白了
------解决方案--------------------