Sql-Server

從子查詢中選擇數據

  • November 24, 2018

我正在做練習,這是連結(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(*) 
)  ;

引用自:https://dba.stackexchange.com/questions/223216