【问题标题】:Getting SQL group query from multiple tables从多个表中获取 SQL 组查询
【发布时间】:2020-02-19 09:32:43
【问题描述】:

我正在开发一个简单的问答游戏,但在创建 SQL (SQL Server 2016) 查询时遇到了困难。我有以下相关表格:

[作者]
ID
姓名

[测验]
ID
AuthorID (指向 [Authors] 中的 ID)

[QuizGames]
ID
QuizID (指向 [Quizes] 中的 ID)

[GamesPlayed]
ID
QuizGameID (指向 [QuizGames] 中的 ID)

[Players]
ID
GamePlayedID (指向 [GamesPlayed] 中的 ID)
DatePlayed

给定一个作者的 ID(在第一个表中),我需要获取他在过去 6 个月内玩的所有游戏的玩家总数(最后一个表)。例如,我需要一个返回我的存储过程 /Query:

Feb2020  Jan2020   Dec2019   Nov2019   Oct 2019   Sep2019
1404      2512      6521      1421      2150       1120

基本上我需要从第一个表中获取作者的 ID,然后在第二个表中查找他创建的所有测验,然后查找用他的测验创建的所有游戏(在第三个表中),然后查找所有游戏(第 4 桌)玩过他的游戏,然后寻找玩过他的游戏的玩家(最后一张桌,按过去 6 个月分组)。

我怎样才能做到这一点?

【问题讨论】:

  • 欢迎来到 SO,您尝试过什么?看看w3schools.com/sql/sql_select.asp
  • 你“需要一个存储过程”,所以你先写一个。这不是免费的代码编写服务。这种方法通常被称为枢轴 - 从搜索该术语开始。如果您是 tsql 新手,此时这可能超出您的能力范围。此外,这种类型的目标通常可以在报告工具中更轻松地实现。

标签: sql sql-server tsql stored-procedures


【解决方案1】:
SELECT p.DatePlayed, COUNT(p.Id)
FROM [Player] p
JOIN [GamesPlayed] gp on gp.Id = p.GamePlayedId
JOIN [QuizGames] qg on qg.Id = gp.QuizGameId
JOIN [Quizzes] q on q.Id = qg.QuizId
JOIN [Author] a on a.Id = q.AuthorId
WHERE p.DatePlayed >= DATEADD(M, DATEDIFF(M, 0,DATEADD(M, -6, GETUTCDATE())), 0)
GROUP BY p.DatePlayed

【讨论】:

  • 它似乎有效,但它按 p.DatePlayed (这是一个日期/时间字段)分组。我做了一个小改动:SELECT MONTH(p.DatePlayed) ... GROUP BY MONTH(p.DatePlayed),它似乎工作了。
猜你喜欢
  • 2020-11-29
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多