MySQL 依据两个元素进行分组并求其和
需求:三张表(购买记录表、票务信息表、人员信息表),查询某时间段内按周对男的、女的以及性别未知的三类人的充值金额合及其总金额进行分组查询(有点绕,白话叙述就是:查询某时间段内每个周中男、女、未知性别这三类人各个充值金额的和以及三者的和,嗯,不错,我觉得我叙述的很清楚了,哇卡卡卡🤣~,另:此示例中时间分组所使用的时间是时间戳,如果表中存的直接是日期的话只需要将下面SQL语句中的将FROM_UNIXTIME方法换成DATE_FORMAT方法即可),因此需要按照性别、周进行分组查询;
表:
1、购买记录表(tt_user_live_buy):

2、票务信息表(tt_user_live_sale):

3、人员信息表(tt_user_info):

三张表中均有数据,并且数据能形成关联(即:购买记录表中的记录数据包含有用户表的用户ID及其票务信息的票务ID),另:用于演示因此表结构较简单;
SQL代码:
SELECT DATE_FORMAT( FROM_UNIXTIME( a.create_time ), '%Y-%u' ) AS t, sum( IF ( c.gender = '1', sale_price, 0 )) AS 'man', sum( IF ( c.gender = '0', sale_price, 0 )) AS 'woman', sum( IF ( c.gender = '', sale_price, 0 )) AS 'unknow', SUM( sale_price ) AS 'all' FROM tt_user_live_buy a, tt_user_live_sale b, tt_user_info c WHERE a.user_id = c.user_id AND a.sale_id = b.sale_id -- AND a.create_time <= '1609218577' -- AND a.create_time >= '1' -- AND a.user_id = '1' -- AND c.gender = '1' GROUP BY t
思路:其实关键点在于将男、女、未知性别三类数据放在同一条数据中返回(可以理解为将纵向三条数据转变为横向一条数据),实现此构想的SQL就是 sum( IF ( c.gender = '1', sale_price, 0 )) AS 'man', ,这句SQL就是说:计算 gender=‘1‘ 的数据的 sale_price 的值之和,并给定预设值为 0;
WHERE语句中存在多个被注释掉的条件,在项目代码中根据情况而定是否使用;
运行得到的结果:


浙公网安备 33010602011771号