sql查询连接帮助?
我有两张表,分别是type(type,playerid)和playerid(playerid,date) 我必须弄清楚每年哪种类型的球员获得了多少“最佳球员奖” 这张桌子应该是这样的sql查询连接帮助?,sql,join,count,Sql,Join,Count,我有两张表,分别是type(type,playerid)和playerid(playerid,date) 我必须弄清楚每年哪种类型的球员获得了多少“最佳球员奖” 这张桌子应该是这样的 year type noofawards 2011 batsmen 3 2011 bowler 5 2010 batsmen 2 我可以获得每年获得的奖项总数,但不能将它们按类型分开,所以我得到的是 year noofawards 2011 3 sel
year type noofawards
2011 batsmen 3
2011 bowler 5
2010 batsmen 2
我可以获得每年获得的奖项总数,但不能将它们按类型分开,所以我得到的是
year noofawards
2011 3
select year , count(year) as "Number of awards"
from
(
select to_char(p.date,'YYYY') as year
from player p, type t
where p.playerid = t.playerid
)
group by year
order by year;
我该怎么办?您是否尝试了以下方法:
select to_char(p.date,'YYYY') as year
, type
, count(*)
from player p, type t
where p.playerid = t.playerid
group by 1,2;
只需使用:
GROUP BY year
, type
- 大多数数据库系统都有一个从日期中提取年份的函数(
或类似名称)YEAR()
- 保留字段或表名,如
,不是一个好主意date
- 您还应该尝试学习
语法,而不是使用JOIN
进行隐式连接WHERE
SELECT YEAR(p.date) AS awardYear
, t.type
, COUNT(*) AS "Number of awards"
FROM player p
JOIN type t
ON p.playerid = t.playerid
GROUP BY awardYear
, t.type
ORDER BY awardYear
, t.type ;
既然这是作业的尖叫声,我就给你一些提示 您不需要使用子查询,您需要在查询中的某个点实际选择类型列。这应该可以:
SELECT year,
type,
COUNT(*) as number
FROM (
SELECT type,
to_char(player.date,'YYYY') as year
FROM player
NATURAL JOIN type
) AS T
GROUP BY year,
type
类型(类型,玩家ID)和玩家(玩家ID,日期)。。。那个么我们从哪里找到“最佳球员”记录呢?你们可以通过(或“隔离”)多个字段进行分组。探索“分组方式”语法选项。很抱歉,要获得奖项数量,我们必须计算投球手、击球手等的数量。这里缺少的是奖项表本身。您有一个玩家类型表和一个玩家/年份表。基于所提供信息的聚合为您提供了每年不同类型的玩家。(也许我读得太深了。)我需要一年一次地安排它们,这就是我的问题所在。我数不出打字机的数目这还不能给我一个总的打字机数目。。。。我得到的结果是2011年击球手1 2011年击球手1 Wheras我需要2011年击球手2我的年度别名和序号组别可能会根据使用的RDBMS提出挑战。ypercube通过使用列/别名引用对组进行的repsonse更健壮。这仍然没有给出类型的总数。。。。我得到的结果是2011年的击球手1 2011年的击球手1我需要2011年的击球手2我能够抽出这一年的时间。。。。只是在使子查询工作时遇到问题,该子查询将所有类型添加到一个类别下。。。。比如2011年赢得awad的击球手总数和2011年赢得awad的投球手总数等等……@user779214:你试过这个查询吗?它会给你什么结果?你也可以编辑你的问题,并在最后添加一个表格数据的小样本吗?然后我给你一个诚实的投票。对许多学生来说,来这里是为了寻求答案而不是帮助。很高兴看到有人真正想了解正在发生的事情。