SQL计数事件与2个表分开

时间:2014-03-03 17:14:08

标签: mysql count group-by

我的MYSQL基础中有3个表,我必须比较每个第一个表(表1和表2)中每个user_ID的时间

这是我的表1:

user_ID

  • A
  • A
  • d
  • ...

这是我的表2:

user_ID

  • A
  • C
  • A
  • ...

这是我的表3(user_ID和昵称之间的链接):

user_ID //昵称

  • A // Bob
  • B // Joe
  • C //汤姆
  • ...

我想得到这样的结果:

昵称//从表1中计算出现次数//从表2中计算出现次数

  • Bob // 1 // 2
  • Joe // 4 // 0
  • Tom // 0 // 2

我没有成功立即从每个表中分别计算,我得到了每个昵称的全局结果:( 你能帮我找到合适的MYSQL请求吗? - ......

1 个答案:

答案 0 :(得分:0)

这种类型的查询有点棘手,因为某些名称可能不在第一个表中,而其他名称可能不在第二个表中。要真正解决此类问题,您需要预先聚合每个查询的结果。要获取所有名称,您需要left outer join

select t3.name, coalesce(cnt1, 0) as cnt1, coalesce(cnt2, 0) as cnt2
from table3 t3 left outer join
     (select name, count(*) as cnt1
      from table1
      group by name
     ) t1n
     on t3.name = t1n.name left outer join
     (select name, count(*) as cnt2
      from table2
      group by name
     ) t2n
     on t3.name = t1n.name;