group by,distinct,sum

只有在分组统计中才会使用group by ,这个分组统计有两个涵义:第一必须是分组,不以组归类就无所谓group by,group by的意思就是以组为单位。第二,必须是计算,而且必须是按组计算。
如
计算每个班级多少人:
select class,count(*) from students group by class;按班级计算,每个班级有多少人。(正确)
select class,grade from students group by class;(错)没有统计计算
 
今天遇到一个问题,就是计算总点击量时会有重复记录,用distinct删除重复行后在用sum求和,但是被删除的行的数据依然加到了sum的总数里。
解决办法就是利用一个派生的表,然后从派生表里计算sum总数,这样被distinct山删除的行的信息就不会被加到sum里。
语句如下:
   #一定要借助派生表来计算总点击量,否则sum总会计算重复的行数据
    select cp_id,cp_name,datatype_id,datatype_name,sum(total_times) AS total_times
    from
     (select 
        DISTINCT(`t1`.`info_id`),
        
        `t2`.`cp_id` AS `cp_id`,
        `t2`.`cp_name` AS `cp_name`,
        substring_index(`t1`.`data_type`, '/', 1) AS `datatype_id`,
        substring_index(`t1`.`data_type`, '/', 1) AS `datatype_name`,
        ifnull(`t3`.`TotalTimes`, 0) AS `total_times`
        #ifnull(sum(`t3`.`TotalTimes`), 0) AS `total_times`
    from
        ((`t_standard_data_task_backup` `t1`
        join `t_dpp_cp_registry` `t2` ON ((`t1`.`contentprovider_id` = `t2`.`cp_id`)))
        left join `t_infoaccess_total_summery` `t3` ON ((`t1`.`info_id` = `t3`.`InfoID`)))
    ) AS cpinfo
    group by cp_id , datatype_name;
    
之前在执行时还报了一个错误:
Every derived table must have its own alias
百度了一下后找到了答案:

这句话的意思是说每个派生出来的表都必须有一个自己的别名

一般在多表查询时,会出现此错误。

因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名

把MySQL语句改成:select count(*) from (select * from ……) as total;

问题就解决了,虽然只加了一个没有任何作用的别名total,但这个别名是必须的

加上了
AS cpinfo后就没问题了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值