MySQL5.1两个查询我无法工作

时间:2012-12-02 18:23:37

标签: mysql

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

我真的不善于撰写查询,所以这就是我到目前为止所做的一切:

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

查询1:

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)

检查此Demo

答案 1 :(得分:0)

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

例如 - 我认为体育场和游戏应该是2个单独的表,有1到多个链接。 (如果游戏可以跨越不同的体育场,甚至可以有很多甚至很多。)

但是对于你的例子:

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

假设体育场桌上有一个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