在同一查询中进行多重计数和相乘

时间:2016-06-14 13:25:42

标签: mysql

我有一个有点复杂的问题。这是我的情况(ERD)。 ERD Scheme

对于仪表板,我需要创建一个数据透视表,向我显示职位空缺使用的总权限。因此我需要:

  • 计算每个模板的空缺数量
  • 计算每个能力的模板数量
  • 和last:将这些数字相乘以得到使用的补偿总量。

我有第一个问题:

SELECT vacancytemplate_id, count(id)
FROM vacancies
group by vacancytemplate_id;

第二个问题也不难,但我不知道正确的解决方案是什么。我真是个脑袋。我的头脑无法理解如何实现下一步并将其放入查询中。请陌生人,帮助我:))

编辑:我想要的结果是这样的

NameOfComp, NrOfTimesUsed
Leading, 17
Inspiring, 2

EDIT2:它应该是一个元查询:

SELECT NameOfComp, (count of the competences used by templates) * (number of vacancies per template)

EDIT3:http://sqlfiddle.com/#!9/2773ca SQLFiddle

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的请求,您需要计算每个空缺的权限。由于您的表结构,这可以非常简单地完成:

 Select v.ID, count(*) from vacancy as v inner join CompTemplate_Table as CT
        on v.Template_ID = CT.Template_ID group by v.ID;

您只能进行一次连接的原因是因为每个模板中的每个能力都会在CompTemplate_Table中有一条记录。此外,使用相同的键将空格连接到模板,就像用于将模板连接到CompTemplate_Table一样,因此它们表示相同的键值(如果您不需要数据,则可以跳过加入模板表)。

如果您想将此数据添加到数据透视表,我会将此练习留给您。如果您进行快速谷歌搜索,可以使用许多教程,它应该不那么难。

更新:对于第二个查询,您正在查看类似的内容:

 Select cp.NameOfComp, count(*) from vacancy as v inner join CompTemplate_Table as CT
        on v.Template_ID = CT.Template_ID inner join competencies as CP
        on CP.ID = CT.Comp_ID
        group by CP.NameOfComp

这里的不同之处在于您要在comptetencies表中添加,因为您需要来自该数据的数据,并通过CP.NameOfComp而不是空缺ID进行分组。您还可以通过添加搜索条件(例如,CP.ID = 12345)来将此限制为特定模板,能力或职位空缺