我有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子句中究竟做错了什么?
答案 0 :(得分:1)
由于您计算的是不同的值并按日期进行分组,因此您可能在多天内拥有相同的trans_id,从而使您在查询中获得更多的计数没有。