2016-12-24 132 views
-3

我有三个表,我想要这个: 对于每个技能,开始于2016年,并且是至少两个培训包的一部分,并且分数介于12和17之间,列出技能ID,其类别,其水平,作为其一部分的训练包数量及其平均得分。SQL中的聚合函数

我写了下面的代码,但当我选择avg和sum时出现问题。

select SKILLNUM , SKCATEGORY , SKLEVEL , count(TPID) 
from (trainingpack t join Is_part_of i on t.TPID=i.TPID join skill s on i.SKILLNUM=s.SKILLNUM) 
where STARTINGDATE like '%2016' and COMPLDATE is not null and score between 12 and 17 
and (SKILLNUM) in (
select is_part_of.SKILLNUM 
from is_part_of 
group by SKILLNUM 
having count(TPID) >=2); 

而且我想这个代码

select SKILL.SKILLNUM , SKILL.SKCATEGORY , SKILL.SKLEVEL ,count(IS_PART_OF.TPID),sum(IS_PART_OF.SCORE) 
from SKILL,TRAININGPACK,IS_PART_OF 
where TRAININGPACK.STARTINGDATE like '%2016' and IS_PART_OF.COMPLDATE is not null and IS_PART_OF.score between 12 and 17 
and IS_PART_OF.TPID=TRAININGPACK.TPID and IS_PART_OF.SKILLNUM=SKILL.SKILLNUM and (is_part_of.SKILLNUM) in (
select is_part_of.SKILLNUM 
from is_part_of 
group by SKILLNUM 
having count(TPID) >=2); 
+0

显示示例表 – DCR

+0

首先找出您正在使用的RDBMS。然后参见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry

+0

您可能需要在group by子句中添加其他列。所以GROUP BY SkillNum,SkCategory,SkLevel –

回答

0

您可以使用aggregate functions没有group by一句话,只要你不包括你的SELECT子句中其他列。

例如:可以使用下面的句子select在您的查询,但你希望你不会得到通过SKILLNUM,SKCATEGORY和SKLEVEL报告..你将只能得到全球数和金额的结果:

select count(IS_PART_OF.TPID),sum(IS_PART_OF.SCORE) from ... 

当你正在寻找通过SKILLNUM,SKCATEGORY和SKLEVEL的报告,你应该包括在您的查询的末尾group by条款:

... group by SKILL.SKILLNUM , SKILL.SKCATEGORY , SKILL.SKLEVEL 

所以,不知道到底你的数据库模型,您的查询应该是:

select SKILL.SKILLNUM , SKILL.SKCATEGORY , SKILL.SKLEVEL ,count( IS_PART_OF.TPID),sum(IS_PART_OF.SCORE) 
from SKILL, TRAININGPACK, IS_PART_OF 
where TRAININGPACK.STARTINGDATE like '%2016' 
and IS_PART_OF.COMPLDATE is not null 
and IS_PART_OF.score between 12 and 17 
and IS_PART_OF.TPID = TRAININGPACK.TPID 
and IS_PART_OF.SKILLNUM = SKILL.SKILLNUM 
and is_part_of.SKILLNUM in (
select is_part_of.SKILLNUM 
from is_part_of 
group by SKILLNUM 
having count(TPID) >=2) 
group by SKILL.SKILLNUM , SKILL.SKCATEGORY , SKILL.SKLEVEL