我有一个具有这种结构的编码动作数据库。
{User, Date, ActionCode}
我需要根据日期和操作代码生成报告,并且操作代码不干净,因为我们必须从多个来源导入它们。
我可以处理其中的大部分(比如用户执行 ActionCode 13 的平均次数)。
但是,这就是我遇到的问题:用户执行可由操作代码 61、62、700 或 701 中的任何一个定义的操作的平均次数。此操作也可以通过使用这两个操作来定义代码 84 和 85 或使用三个操作代码 10、11 和 12。
这是我处理第一组操作代码的内容:
select
average(cnt)
from
(
select
count(distinct(date)) as cnt
from
codes
where
actioncode in (61, 62, 700, 701)
group by user
)
我使用不同的日期,因为一些用户编码到多个地方,我们会为该操作返回多个代码。我如何添加“或者他们在同一天同时拥有 84 和 85”?
许多可能的方法之一:
我们不需要括号,因为运算符优先级对我们有利。
DISTINCT
只有在可以重复时才仍然需要。(10 + 11 + 12) 和 (84 + 85) 的情况只产生一行。我使用
usr
instead ofuser
,因为我不喜欢滥用保留字作为标识符。date
也不是一个好主意。