Sql-Server
從子查詢中選擇數據
我正在做練習,這是連結(https://www.wiseowl.co.uk/sql/exercises/standard/subqueries/4228/)。誰能幫我。提前致謝!
問題
寫一個
SELECT
語句來返回來自 3 個大陸的事件最少的事件。幫助
為此,首先編寫一個
SELECT
返回所有大陸和事件的查詢。子查詢選擇
未排序的結果返回 459 個事件。
現在在下面寫另一條
SELECT
語句,列出事件最少的 3 個大洲COUNT
的事件。將 放在COUNT
子句ORDER BY
中,而不是SELECT
.最後在第一個子句中使用第二個
SELECT
作為過濾器。要做到這一點,請使用.SELECT``WHERE``ContinentName IN (subquery)
子查詢大陸
這 3 大洲只有 8 場賽事 - 可能會選擇伊維薩島和群島!
我的查詢
Select [ContinentName], [EventName] from tblevent a join[dbo].[tblCountry] c on a.[CountryID]=c.[CountryID] join [dbo].[tblContinent] b on c.[ContinentID]=b.[ContinentID] where [ContinentName] in ( select top 3 [ContinentName] from tblevent a join[dbo].[tblCountry] c on a.[CountryID]=c.[CountryID] join [dbo].[tblContinent] b on c.[ContinentID]=b.[ContinentID] group by [ContinentName] ) order by count([EventName])
結果:
執行上述查詢時出現錯誤消息:
列 ‘dbo.tblContinent.ContinentName’ 在選擇列表中無效,因為它不包含在聚合函式或 GROUP BY 子句中。
如果我刪除了,問題就消失了,
order by count([EventName])
但我需要來自 3 個大陸的事件最少的事件,所以order by count([EventName])
必須在那裡。還有一些其他問題導致錯誤。
該錯誤是由於
COUNT()
在沒有GROUP BY
- 這意味著GROUP BY ()
- 同時在SELECT
列表中有一些列的查詢中使用。您需要COUNT()
在子查詢中移動它。假設您要顯示來自 3 大洲的所有事件,事件數量最少:
Select c.[ContinentName], a.[EventName] from tblevent a join [dbo].[tblCountry] c on a.[CountryID] = c.[CountryID] join [dbo].[tblContinent] b on c.[ContinentID] = b.[ContinentID] where [ContinentName] in ( select top 3 [ContinentName] from tblevent a join [dbo].[tblCountry] c on a.[CountryID] = c.[CountryID] join [dbo].[tblContinent] b on c.[ContinentID] = b.[ContinentID] group by [ContinentName] order by count(*) ) ;