Oracle 子查询建议
Oracle subquery suggestion
我有以下 2 个问题。我很难将第二个查询合并到第一个查询中;这两个查询都可以通过 jobid 加入。基本上,我要做的是通过加入 jobid,即 total_opens 和 unique_open_cnt,将第二个查询中的 2 个总列合并到第一个查询中。我希望这是清楚的。有什么想法真的是appreciated.Thanks提前
SELECT u.fname, u.lname, j.job_id, j.title, ja.SENT_DATE,
count(distinct ja.email_id) as total_sent,
COUNT(je.EMAIL_ID) as total_clicks
FROM jobs_table j , user_table u ,
job_alerts ja
left join job_eml_track je
on ja.EMAIL_ID = je.EMAIL_ID
WHERE j.user_id = u.user_id
and ja.JOB_ID = j.JOB_ID
and ja.JOB_ID = 116
group by j.job_id, j.title,ja.SENT_DATE,j.EMPLOYER_ID,u.fname, u.lname
SELECT COUNT(*) AS total_opens ,
COUNT(DISTINCT userd) AS unique_open_cnt,
REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') as jobid
FROM basetable v
WHERE v.id LIKE 'testnew%'
and REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') = 116
group by REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i')
可能是这样的
select * from
(<your first query>) q1
inner join
(<your second query>) q2
on q1.job_id = q2.jobid
您应该可以使用 WITH clause。我没有检查过语法,而是类似
with a AS
(SELECT u.fname, u.lname, j.job_id, j.title, ja.SENT_DATE,
count(distinct ja.email_id) as total_sent,
COUNT(je.EMAIL_ID) as total_clicks
FROM jobs_table j , user_table u ,
job_alerts ja
left join job_eml_track je
on ja.EMAIL_ID = je.EMAIL_ID
WHERE j.user_id = u.user_id
and ja.JOB_ID = j.JOB_ID
and ja.JOB_ID = 116
group by j.job_id, j.title,ja.SENT_DATE,j.EMPLOYER_ID,u.fname, u.lname ),
b as
(
SELECT COUNT(*) AS total_opens ,
COUNT(DISTINCT userd) AS unique_open_cnt,REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') as jobid
FROM basetable v
WHERE v.id LIKE 'testnew%'
and REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') = 116
group by REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i'))
select a.fname, a.lname -- and so on....
from a, b
where a.jobid = b.jobid
order by a.jobid
我有以下 2 个问题。我很难将第二个查询合并到第一个查询中;这两个查询都可以通过 jobid 加入。基本上,我要做的是通过加入 jobid,即 total_opens 和 unique_open_cnt,将第二个查询中的 2 个总列合并到第一个查询中。我希望这是清楚的。有什么想法真的是appreciated.Thanks提前
SELECT u.fname, u.lname, j.job_id, j.title, ja.SENT_DATE,
count(distinct ja.email_id) as total_sent,
COUNT(je.EMAIL_ID) as total_clicks
FROM jobs_table j , user_table u ,
job_alerts ja
left join job_eml_track je
on ja.EMAIL_ID = je.EMAIL_ID
WHERE j.user_id = u.user_id
and ja.JOB_ID = j.JOB_ID
and ja.JOB_ID = 116
group by j.job_id, j.title,ja.SENT_DATE,j.EMPLOYER_ID,u.fname, u.lname
SELECT COUNT(*) AS total_opens ,
COUNT(DISTINCT userd) AS unique_open_cnt,
REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') as jobid
FROM basetable v
WHERE v.id LIKE 'testnew%'
and REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') = 116
group by REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i')
可能是这样的
select * from
(<your first query>) q1
inner join
(<your second query>) q2
on q1.job_id = q2.jobid
您应该可以使用 WITH clause。我没有检查过语法,而是类似
with a AS
(SELECT u.fname, u.lname, j.job_id, j.title, ja.SENT_DATE,
count(distinct ja.email_id) as total_sent,
COUNT(je.EMAIL_ID) as total_clicks
FROM jobs_table j , user_table u ,
job_alerts ja
left join job_eml_track je
on ja.EMAIL_ID = je.EMAIL_ID
WHERE j.user_id = u.user_id
and ja.JOB_ID = j.JOB_ID
and ja.JOB_ID = 116
group by j.job_id, j.title,ja.SENT_DATE,j.EMPLOYER_ID,u.fname, u.lname ),
b as
(
SELECT COUNT(*) AS total_opens ,
COUNT(DISTINCT userd) AS unique_open_cnt,REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') as jobid
FROM basetable v
WHERE v.id LIKE 'testnew%'
and REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i') = 116
group by REGEXP_REPLACE(v.id, '^testnew_(\d+)', '', 1, 1, 'i'))
select a.fname, a.lname -- and so on....
from a, b
where a.jobid = b.jobid
order by a.jobid