我在sql中有2个表,我正在进行查询:
在第一个查询中我正在计算日期数据
在secont查询中,我计算的是同一日期的数据
在3查询中,我正在进行内连接,但我需要显示查询中的数据
20101120 26 19
但我有:
20101120 313 313
我的例子是:
http://sqlfiddle.com/#!4/e61fc/2
谁能帮帮我?
有什么问题?
我可以通过加入来实现吗?
或问题是加入?
答案 0 :(得分:1)
SELECT A.id_date_sus AS id_date,
A.N1,
B.N2
FROM (SELECT id_date_sus,
COUNT(id_date_sus) AS N1
FROM suscription
GROUP BY id_date_sus) A
LEFT JOIN (SELECT id_date,
COUNT(id_date) AS N2
FROM billing
GROUP BY id_date) B
ON A.id_date_sus = B.id_date;
答案 1 :(得分:0)
如果您使用oracle db,您可以执行以下操作:
with s1 as
(select id_date_sus, count(id_date_sus) c1
from suscription
group by id_date_sus),
s2 as
(select id_date, count(id_date) c2
from billing
group by id_date)
select s1.id_date_sus, s1.c1, s2.c2 from s1, s2 where s1.id_date_sus = s2.id_date
答案 2 :(得分:0)
问题在于您的数据。每个表中只有两个服务。
所以
(s.id_service = b.id_service and
b.id_date = s.id_date_sus)
未加入唯一键。
当发生这种情况时,我们会得到一个笛卡尔积,其中连接一侧的每条记录都与连接另一侧的每条记录配对。对于产生(19 * 15)行的service_id=1
;用于产生(4 * 7)行的service_id=2
。现在,285 + 28 = 313,这解释了麻烦你的计数。
解决方案是将两个计数作为单独的子查询运行,然后将它们连接到主查询中:
select s.id_date_sus, s.cnt as s_cnt, b.cnt as b_cnt
from
( select s.id_date_sus, count(*) cnt
from suscription s
group by s.id_date_sus) s
join ( select b.id_date, count(*) cnt
from billing b
group by b.id_date) b
on (s.id_date_sus = b.id_date);