1

我需要帮助的第一个查询 - 我有一个名为 Stadium 的表,其中包含有关不同体育场的信息。每天可以在某个体育场进行多场比赛。Stadium.Number 是指体育场的编号,Stadium.Date 是指比赛的日期。我需要查询列出每个 Stadium.Number,即举办最多比赛的日期。

我真的不擅长写查询所以这就是我到目前为止的全部内容:

SELECT Number, count(Date)
FROM Stadium
ORDER BY Stadium.Number, Stadium.Date

第二个查询 - 我需要列出与去年 1 月 (2011-01) 相比,今年 1 月 (2012-01) 至少多出 25% 的比赛的 Stadium.Number。 日期是指比赛的日期.

感谢大家的帮助!

4

2 回答 2

0

查询一:

SELECT Number, Date
FROM Stadium
group by Number,Date
order by count(Date) desc

查询 2:

SELECT Number,count(Date)
FROM Stadium
where date>='2012-01-01' and date <='2012-01-31'
group by Number
having count(Date)> ((select count(Date)
FROM Stadium
where date>='2011-01-01' and date <='2011-01-31')*0.25)

检查这个演示

于 2012-12-02T18:29:43.013 回答
0

我真的认为你应该规范化你的数据库模式,它会让这样的查询很容易解决。

例如 - 我认为 Stadium 和 Game 应该是 2 个单独的表,具有一对多的链接。(如果一场比赛可以跨越不同的体育场,甚至是多对多)。

但是对于您的示例:

SELECT s.Number AS Stadium, s.[Date], COUNT(s.[Date]) AS 'Count'
FROM Stadium s
GROUP BY s.Number, s.[Date]
ORDER BY s.Number, COUNT(s.[Date]) DESC

假设 Stadium 表上有一个 Id,这将适用于您的第二个查询 - 但不确定是否有更有效的方法。

SELECT s.Number AS Stadium,
       COUNT(y1.[Date]) AS Year1Count,
       COUNT(y2.[Date]) AS Year2Count,
       COUNT(y1.[Date]) / COUNT(y2.[Date]) * 100 AS Growth
FROM Stadium s
       LEFT OUTER JOIN Stadium y1 ON s.Id = y1.Id AND y1.[Date] BETWEEN '2011-01-01 00:00:00' AND '2011-12-31 23:59:59'
       LEFT OUTER JOIN Stadium y2 ON s.Id = y2.Id AND y2.[Date] BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'
GROUP BY s.Number
HAVING COUNT(y1.[Date]) / COUNT(y2.[Date]) * 100 > 25
于 2012-12-02T18:31:14.493 回答