首页 > 解决方案 > 在 SQL 中汇总数据

问题描述

大家好,我是新来的,我一直在我的 SQL 数据库中进行总结。

为了使示例非常简单,下面是我的数据。

GAME_ID       GOALIEID       SCORED
2001             5             N
2001             4             N
2001             5             Y
2001             4             N
2001             5             Y 

这是一场枪战,我想总结一下 Game_ID、GoalieID 每个守门员的扑救次数,以及每个守门员实际扑救的次数。N=SAVE 和 Y=GOAL 放弃

我正在尝试按降序输出我的结果,如下所示:

GAME_ID      GOALIEID      SAVES
 2001           4           2
 2001           5           1

目前基于我的代码:

SELECT GAME_ID, GOALIEID, COUNT(SCORED) AS SAVES
FROM GIRAFFE.MLS
WHERE SCORED = 'N' 
GROUP BY GAME_ID
ORDER BY COUNT (SCORED) DESC

但我得到的结果只是将所有扑救加起来,并将其归因于一名守门员,如下所示。

GAME_ID    GOALIEID    SAVES
 2001         5          3

上述问题已解决。

最后一个问题是如何在 SQL 中查询 STREAK

例如:

GAME_ID   GOALIEID    TEAMID    TEAMSHOTNUM  OVERALLSHOT   SCORED
2001         5           1            1            1          Y
2001         4           2            1            2          N
2001         5           1            2            3          N
2001         4           2            2            4          N
2001         5           1            3            5          N
2001         4           2            3            6          N

基于这个简单的例子:我如何查询最连续的“保存”,即“GoalieID”的“N”现在想象我的数据有多个游戏要查看,但为简单起见,我这里只有一个游戏。

我的结果我希望看起来像这样:

GAME_ID     GOALIEID     STREAK
   2001        4           3

这将表明“GOALIEID”#4 进行了 3 次连续扑救以赢得比赛,这表明最高的连续扑救实际上是 3 次。请注意,这将跨越数千场比赛。但是我在这里只用了 1 场比赛就变得简单了。

谢谢大家的帮助!

标签: mysql

解决方案


实际上你应该按 GAME_ID 和 GOALIEID 分组:

SELECT GAME_ID, GOALIEID, COUNT(SCORED) AS SAVES
FROM a
WHERE SCORED = 'N' 
GROUP BY GAME_ID, GOALIEID
ORDER BY SAVES DESC

推荐阅读