当前位置: 代码迷 >> Sql Server >> 去重复后,关联表求和,该怎么解决
  详细解决方案

去重复后,关联表求和,该怎么解决

热度:33   发布时间:2016-04-24 09:01:19.0
去重复后,关联表求和
问题是这样的(  表一 如下   ):

id            ip           user           time                            mac

1       1.1.1.1         a            2015-6-6           0000-1111-2222-3333

1       1.1.1.1         a            2015-6-6           9999-0000-4444-5555

1       2.2.2.2        a            2015-6-6           7777-1111-2222-66666

1       2.2.2.2        a            2015-6-6           8888-9999-2222-00000

1       7.7.7.7        b            2015-6-6           6666-5555-2222-6666

1       8.8.8.8        b            2015-6-6           33333-99999-2222-2222

表二 数据如下:
id            ip                    time                pv

1       1.1.1.1            2015-6-6           123

2       2.2.2.2            2015-6-6           456

通过第一表,第二表,ip去重复后,关联表查询SQL这样写的:
select T1.ip,count(*) as macs,T2.pv from mactj T1 JOIN pvip T2 ON T1.ip=T2.ip and T1.[macdate]=T2.[tjtime] where user='"&user&"' and macdate)='时间' group by T1.ip,T2.pv ORDER BY macs desc

但是现在想调出用户  a 下面所有IP相同日期,在表二的 PV   总和      该如何写呢,麻烦指点    谢谢
------解决思路----------------------
SELECT SUM(T2.pv)
  FROM pvip T2 
 WHERE EXISTS (SELECT *
                 FROM mactj T1 
                WHERE T1.ip=T2.ip
                  AND T1.[macdate]=T2.[tjtime]
                  AND T1.[user] = 'a')

------解决思路----------------------
select T1.ip,T1.[macdate],count(*) as macs,SUM(T2.pv)pv
from mactj T1 JOIN pvip T2 ON T1.ip=T2.ip and T1.[macdate]=T2.[tjtime]
where user='"&user&"' and macdate)='时间'
group by T1.ip,T1.[macdate]
ORDER BY macs DESC
------解决思路----------------------
你多了一个右括号

select T1.ip,T1.[macdate],count(*) as macs,SUM(T2.pv)pv
from mactj T1 JOIN pvip T2 ON T1.ip=T2.ip and T1.[macdate]=T2.[tjtime]
where user='"&user&"' and macdate='时间'
group by T1.ip,T1.[macdate]
ORDER BY macs DESC
------解决思路----------------------
是不是要根据表1  a用户中IP地址重复的去表2中求pv和
------解决思路----------------------

WITH mactj(id, ip, [user], [time],  mac)AS
(
select '1','1.1.1.1','a','2015-6-6','0000-1111-2222-3333' union all
select '1','1.1.1.1','a','2015-6-6','9999-0000-4444-5555' union all
select '1','2.2.2.2','a','2015-6-6','7777-1111-2222-66666' union all
select '1','2.2.2.2','a','2015-6-6','8888-9999-2222-00000' union all
select '1','7.7.7.7','b','2015-6-6','6666-5555-2222-6666' union all
select '1','8.8.8.8','b','2015-6-6','33333-99999-2222-2222'
),
pvip (id,ip,[time],pv) AS
(
select '1','1.1.1.1','2015-6-6','123' union all
select '2','2.2.2.2','2015-6-6','456'
)

--------------------------------------------------------------------------
select T1.ip, T1.[time], count(T1.ip) as macs, SUM(Convert(int,T2.pv)) as pv
from mactj T1 left JOIN pvip T2 ON T1.ip=T2.ip and T1.[time]=T2.[time]
where T1.[user]='a' and T1.[time]='2015-6-6'
group by T1.ip, T1.[time]
ORDER BY count(T1.ip) DESC



------解决思路----------------------

SELECT SUM(T2.pv)
FROM T2 T2
left join T1  T1 on  T1.ip=T2.ip 
                 AND T1.[macdate]=T2.[tjtime]
                 AND T1.[user] = 'a'
  相关解决方案