Mysql 按问题分组汇总

Mysql 按问题分组汇总,mysql,group-by,sum,Mysql,Group By,Sum,我在这里被两个表之间的SQL语句和GROUPBY子句的sum难住了 表1:num_调用_数据 numcallsid, date_added, date_of_call, teamlead, agent, agent_username, agent_userrole, numcalls, teamsorter '2275', '2013-12-30 15:37:11', '2013-12-20', 'KARMEN', 'HANNAH', 'HannahCC',

我在这里被两个表之间的SQL语句和GROUPBY子句的sum难住了

表1:num_调用_数据

numcallsid, date_added,             date_of_call, teamlead, agent,    agent_username, agent_userrole, numcalls, teamsorter
'2275',     '2013-12-30 15:37:11', '2013-12-20', 'KARMEN', 'HANNAH', 'HannahCC',    'Front Office', '1',      '1'
'2276',     '2013-12-30 15:40:12', '2013-12-23', 'KARMEN', 'HANNAH', 'HannahCC', 'Support',      '1',      '2'
'2277',     '2013-12-30 15:40:48', '2013-12-23', 'KARMEN', 'HANNAH', 'HannahCC',    'Front Office', '0',      '1'
表2:美元数据

dollarsid, date_added,            last_update_date, created_by, transaction_amt, enrollee, transaction_type, order_number, order_created
'21333',   '2013-12-30 15:38:39', '2013-12-20',     'HannahCC', '90.00',              '1',     'Item List Price', '345',        '2013-12-20'
'21334',   '2013-12-30 15:40:48', '2013-12-23',     'HannahCC', '-90.00',            '-1',    'Item Cancel',     '345',        '2013-12-20'
'21335',   '2013-12-30 15:40:48', '2013-12-23',     'HannahCC', '100.00',            '1',     'Item List Price', '999',        '2013-12-23'
SQL语句:

SELECT  
t.agent_userrole as agent_userrole, 
t.teamlead as teamlead,
t.agent as agent, 
t.agent_username as agent_username, 
t.numcalls as numcalls, 
d.created_by as created_by, 
date_format(d.last_update_date,'%Y-%m-%e') as last_update_date, 
sum(d.transaction_amt) as transaction_amt, 
sum(d.enrollee) as enrollee,
t.teamsorter as teamsorter 
FROM callconversion.dollars_data d, callconversion.num_calls_data t  
WHERE
t.agent_username=d.created_by  
AND d.last_update_date between '2013-12-1' and '2013-12-29'  
AND t.date_of_call=d.last_update_date 
GROUP BY  last_update_date, teamsorter, teamlead, agent_userrole, agent  
ORDER BY teamsorter asc, teamlead asc, agent_userrole asc, agent asc, last_update_date asc
返回的输出:

agent_userrole,          teamlead, agent,    agent_username, numcalls, created_by, last_update_date, transaction_amt, enrollee, teamsorter
'Front Office',         'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC',  '2013-12-20',     '90.00',         '1',      '1'
'Front Office',         'KARMEN', 'HANNAH', 'HannahCC',     '0',      'HannahCC',  '2013-12-23',     **'10.00',        '0'**,   '1'
'Registration Support', 'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC',  '2013-12-23',     **'10.00',        '0'**,   '2'
agent_userrole,          teamlead, agent,    agent_username, numcalls, created_by, last_update_date, transaction_amt, enrollee, teamsorter
'Front Office',          'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC', '2013-12-20',     '90.00',         '1',      '1'
'Front Office',          'KARMEN', 'HANNAH', 'HannahCC',     '0',      'HannahCC', '2013-12-23',     **'-90.00',      '-1'**,   '1'
'Registration Support',  'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC', '2013-12-23',     **'100.00',      '1'**,    '2'
预期/期望输出:

agent_userrole,          teamlead, agent,    agent_username, numcalls, created_by, last_update_date, transaction_amt, enrollee, teamsorter
'Front Office',         'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC',  '2013-12-20',     '90.00',         '1',      '1'
'Front Office',         'KARMEN', 'HANNAH', 'HannahCC',     '0',      'HannahCC',  '2013-12-23',     **'10.00',        '0'**,   '1'
'Registration Support', 'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC',  '2013-12-23',     **'10.00',        '0'**,   '2'
agent_userrole,          teamlead, agent,    agent_username, numcalls, created_by, last_update_date, transaction_amt, enrollee, teamsorter
'Front Office',          'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC', '2013-12-20',     '90.00',         '1',      '1'
'Front Office',          'KARMEN', 'HANNAH', 'HannahCC',     '0',      'HannahCC', '2013-12-23',     **'-90.00',      '-1'**,   '1'
'Registration Support',  'KARMEN', 'HANNAH', 'HannahCC',     '1',      'HannahCC', '2013-12-23',     **'100.00',      '1'**,    '2'

似乎
交易金额
加入者
列的汇总方式与我预期的不同,基于
分组依据
值。它似乎由
上次更新日期
来总结,但没有考虑到具有区分因素的
代理用户角色
列。

问题似乎是调用的
日期
时间戳
似乎只是日期,不包括时间。因此,
numcalls\u data
中具有
last\u update\u time=2013-12-23
的每一行都将
num\u calls\u data
中的两行与
date\u of\u call=2013-12-23
匹配,因此您的输出将显示这两行的总和。100.00和-90.00由
sum()
加在一起,得到的结果是10.00。

要得到想要的结果,必须创建某种伪时间/等级来区分同一日期的行,以便在同一天它只连接一次。 这是一个做类似事情的

唯一的问题是,您不知道哪个agentuserroll将被分配哪个数量,因为在您的表中似乎没有任何东西可以跟踪这种关系


也许您想将
order by
numcallsid
dollarsid
添加到内部查询中,这样至少您知道首先创建的记录将与也首先创建的记录(如下所示)连接起来。

首先,我建议您将连接语法更新为ANSI 92标准。callconversion.num_调用t.agent_username=d.created_byuse
FROM callconversion.dollars_data d internal JOIN callconversion.num_调用t.agent_username=d.created_数据t,而不是callconversion.dollation.num_调用t.agent_username=d.created_by
。我不应该期望得到与我得到的结果不同的结果,但我会更新它。但是在group by子句中包含“agent\u userrole”不应该提供一些区别以保持相同日期的总和分开吗?不,因为它不会出现在DOURES\u数据表中的任何地方,如果出现了,您还必须使用类似“t.agent\u userrole=d.agent\u userrole”的内容。若要检查发生了什么,请将
sum(x)
表达式替换为
x
,并省略分组by。你将得到5行。这5行在完成初始选择后汇总。(好吧,我在这里过于简化了,优化器将以不同的方式处理它,但结果是一样的)。谢谢Guntram,这是有道理的。有没有办法用给定的数据达到预期的结果?或者这是我需要在SQL语句之外处理的事情吗?选中-使用鼠标选择上面的语句,按下执行SQL按钮,然后思考当您将
group by
列中具有相同值的所有行相加时会发生什么。以下是您的原始陈述作为参考。