我想知道SQL是什么,如果我希望数据从数字的出现相对于另一个表中的数据计算。
TABLE1
Day1 Day2
--------------------
1 2
2 3
1 3
3 1
TABLE2
ID NAME
------------------
1 John
2 Mary
3 Tom
我希望SQL的结果是这个
ID NAME OCCUR
1 John 3
2 Mary 2
3 Tom 3
获取此结果的SQL如何?
答案 0 :(得分:2)
似乎您想要计算table1
中有多少行在任一列中都有匹配值。一个简单的方法是:
select t2.*,
(select count(*)
from table1 t1
where t2.id in (t1.day1, t1.day2)
) as occur
from table2 t2;
答案 1 :(得分:0)
在表1中,您必须为表格2创建外键。可能是用户的ID。有了这个:
Select t2.id, t2.name, Sum(t1.day)
from table1 t1
innerjoin table2 t2
on t1.id = t2.id
答案 2 :(得分:0)
从table2中选择id和name,并在子查询中获取table1中出现的次数:
select
id,
name,
(
select sum
(
case when t1.day1 = t2.id then 1 else 0 end +
case when t1.day2 = t2.id then 1 else 0 end
)
from table1 t1
where t2.id in (t1.day1, t1.day2)
) as occur
from table2 t2
答案 3 :(得分:0)
将day1
和day2
列合并为一,然后计数。
<强>查询强>
select t1.ID, t1.Name, count(t2.[day]) as occur
from table2 t1
left join
(select Day1 as [day] from table1
union all
select Day2 as [day] from table1) t2
on t1.ID = t2.[day]
group by t1.ID, t1.Name;