group by date子句赋予不同的价值

时间:2011-11-29 03:12:36

标签: mysql sql

我有3个表:user_transaction,transaction和users

我正在尝试创建不同事务的摘要表 在每个日期的基础上 为每个员工 对于每个资源

如下:(使用格式说明符过滤日期时间)

select 
  count(distinct(user_transaction.trans_id)) as obj, 
  DATE_FORMAT(DATE, '%Y-%m-%d') as tdate
from 
  user_transaction, transaction,users 
where 
  users.id = user_transaction.user_id 
  and users.employeeid = 'samuel' 
  and user_transaction.trans_id=transaction.id  
  and resource_id =1 and transactiontext like '%<-->%' 
  and DATE_FORMAT(user_transaction.date,'%Y-%m-%d') 
    between '2011-08-30' and '2011-11-28'
  group by 
    DATE_FORMAT(user_transaction.DATE, '%Y-%m-%d')

上述查询的结果是我在该范围内的每个日期获得用户'samuel'的不同交易计数

e.g。 2011-08-30 ............ 22;      2011-09-01 ............ 431;      2011-09-03 ............ 64; 等。

现在我总结了所有这些值,我得到了一个像用户总计数:1486

如果我在“日期”字段中执行没有分组的直接计数,则此计数与我针对相同用户和日期范围的修改查询不匹配。 即如果我在没有日期分组的情况下运行下面的查询:

select 
  count(distinct(user_transaction.trans_id)) as obj, 
from 
  user_transaction, transaction,users 
where 
  users.id = user_transaction.user_id and users.employeeid = 'samuel' 
  and user_transaction.trans_id=transaction.id  
  and resource_id =1 and transactiontext like '%<-->%' 
  and DATE_FORMAT(user_transaction.date,'%Y-%m-%d') 
    between '2011-08-30' and '2011-11-28'

这给了我一个像1452的计数, 日期分组范围内的计数和总计得到的总数通常更适合每个用户,不知道为什么。

我需要为我的汇总表计算每个日期的计数。

我在不使用group by子句的情况下直接获得的计数是正确的,在表格中进行了检查。

我在group by子句中究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您计算的是不同的值并按日期进行分组,因此您可能在多天内拥有相同的trans_id,从而使您在查询中获得更多的计数没有。