1

ヘルプが必要な最初のクエリ - さまざまなスタジアムに関する情報を保持するスタジアムという名前のテーブルがあります。特定のスタジアムで 1 日に複数のゲームをプレイできます。Stadium.Number はスタジアムの番号を示し、Stadium.Date は試合の日付を示します。最も多くの試合が開催された日付である、Stadium.Number ごとに一覧表示するクエリを作成する必要があります。

私はクエリを書くのが本当に得意ではないので、これまでのところこれだけです:

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

2 番目のクエリ - 昨年 1 月 (2011-01) のスタジアムと比較して、今年の 1 月 (2012-01) に少なくとも 25% 多くの試合が行われたスタジアムの数をリストする必要があります。 .

助けてくれてありがとう!

4

2 に答える 2

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)

このデモをチェック

于 2012-12-02T18:29:43.013 に答える
0

データベーススキーマを正規化する必要があると本当に思います。これにより、このようなクエリの解決が非常に簡単になります。

たとえば、スタジアムとゲームは 1 対多のリンクを持つ 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 があると仮定すると、これは 2 番目のクエリで実行されますが、より効率的な方法があるかどうかはわかりません。

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 に答える