我有一个包含字段“ID”,“mailSent”和“serviceUsed”的表。 “mailSent”包含发送邮件的时间,“serviceUsed”包含一个计数器,该计数器只显示用户是否已将该服务用于我发送的特定邮件。
我正在尝试做一个报告,为每个ID提供以下两个事实: 1.用户最后一次使用该服务,即特定用户服务的使用时间!= 0 2.用户使用该服务的总次数,即每个用户的总和(serviceUsed)
我想在一个视图中显示它,并将结果始终映射到特定用户。我可以单独构建两个查询中的每一个,但不知道如何将它组合到一个视图中。这两个查询如下所示:
1. Select ID, max(mailSent) from Mails where serviceUsed > 0 group by ID
2. Select ID, sum(serviceUsed) from Mails group by ID
请注意,我不能只将它们组合在一起,因为我还想显示从未使用过我的服务的ID,即serviceUsed = 0.因此,如果我只是在第一个查询中删除了where子句,那么我将得到错误的结果max(mailSent)。知道如何将两者结合起来吗?
换句话说,我想要的是这样的: ID,max(mailSent),sum(serviceUsed) 其中max(mailSent)来自第一个查询,sum(serviceUsed)来自第二个查询。
问候!
答案 0 :(得分:1)
试试这个
SELECT * FROM
(
Select ID, max(mailSent) from Mails where serviceUsed > 0 group by ID
UNOIN ALL
Select ID, sum(serviceUsed) from Mails group by ID
) AS T
答案 1 :(得分:0)
您可以在一个查询中编写它:
SELECT ID, sum(serviceUsed), max(mailSent) from Mails group by ID;
问题是,您的第二个查询中没有serviceUsed > 0
并不重要。你也可以总结它们,因为它们的值为0。
如果您有以下输入:
id serviceUsed mailSent
--------------------------
1 0 1.1.1970
1 4 3.1.1970
1 3 4.1.1970
2 0 2.1.1970
Query应返回此结果:
id serviceUsed mailSent
--------------------------
1 7 4.1.1970
2 0 2.1.1970
但我想知道,你的主键在哪里?
答案 2 :(得分:0)
您希望使用条件聚合执行此操作:
select ID, max(case when serviceUsed > 0 then mailSent end),
sum(serviceUsed)
from Mails
group by ID;