MySQL Left Join Subselect

Stu*_*tuR 5 mysql subquery left-join

我有一个简单的语言/模板ID表:

语言| 模板

en,t1
en,t1
au,t2
ge,t3
en,t1
ge,t2
ge,t3

模板始终为t1,t2或t3.总共有3种语言:en,au,ge.

表中有更多信息,我只是展示与此问题相关的内容,我将使用数据进行绘图,因此需要以这种格式返回:

en,t1,3
en,t2,0
en,t3,0
au,t1,0
au,t2,1
au,t3,0
ge,t1,0
ge,t2,1
ge,t3,2

然而,这会计算每种语言中出现的许多模板.但是,如果表中没有该特定语言的模板ID,我遇到的问题是返回零计数.

我认为它需要在模板ID上进行某种左连接子选择以确保为每种语言返回3个模板ID?

Jos*_*ody 6

可能有更好的方法,我没有在MySQL中测试它,但以下在SQL Server 2005中工作:

Select a.language, b.template, count (c.template) as combo_count
from
(select distinct language from tablename) as a
inner join (select distinct template from tablename) as b on 1 < 2 /* this could be cross join, same thing. */
left outer join tablename c on c.language = a.language and c.template = b.template
group by a.language, b.template
order by 1, 2
Run Code Online (Sandbox Code Playgroud)

以下是您的示例数据的结果:

au  t1  0
au  t2  1
au  t3  0
en  t1  3
en  t2  0
en  t3  0
ge  t1  0
ge  t2  1
ge  t3  2
Run Code Online (Sandbox Code Playgroud)