我是新手,還在學習,所以請原諒我的代碼。我已經用谷歌搜索并作為最后的手段發布尋求幫助。希望一位資深程式員可以提供幫助。
我想要達到的目標:哪門課程的學生人數低于平均水平?
我正在使用 SQL Server Management Studio v18。
我的代碼不起作用,我不明白為什么派生表不被接受。我知道我可以創建另一個子查詢并實作它,但仍然想了解為什么在這種情況下派生表 C 不起作用?
請幫助解釋并建議實作此查詢的最簡單方法。
select
c.course, c.num_of_students
from
(select
course, count(pname) as num_of_students
from
Studies
group by
COURSE) c
where
c.num_of_students < (select avg(c.num_of_students) from c);
我收到此錯誤:
無效的物件名稱“c”
這個無效的物件名稱在 WHERE 子句行中突出顯示。
資料在預覽中正確顯示。
資料:
| 名稱 | 研究所 | 課程 | 課程費用 |
|---|---|---|---|
| ANAND | 薩巴里 | PGD??CA | 4500 |
| 阿爾塔夫 | 科特 | 直流電 | 7200 |
| 朱莉安娜 | BDPS | 馬華 | 22000 |
| 卡馬拉 | 普拉加提 | 直流電 | 5000 |
| 瑪麗 | 薩巴里 | PGD??CA | 4500 |
| 尼爾森 | 普拉加提 | 行動黨 | 6200 |
| 帕特里克 | 普拉加提 | DCAP | 5200 |
| 卡迪爾 | 蘋果 | HDCA | 14000 |
| 拉梅什 | 薩巴里 | PGD??CA | 4500 |
| 麗貝卡 | 杰出的 | DCAP | 11000 |
| 雷米莎 | BDPS | 資料中心 | 6000 |
| 瑞瓦提 | 薩巴里 | 行動黨 | 5000 |
| 維賈亞 | BDPS | 直流電 | 48000 |
uj5u.com熱心網友回復:
派生表在查詢中的范圍有限,只能在FROM. 您有幾個選擇,其中最好的是 CTE:
WITH c AS (
SELECT
course, COUNT(pname) as num_of_students
FROM Studies
GROUP BY course
)
SELECT
c.course, c.num_of_students
FROM c
WHERE
c.num_of_students < (SELECT AVG(c.num_of_students) FROM c);
其他選項,雖然在這種情況下可能不太理想,除非您需要在其他查詢中使用派生表中的結果,但可以定義臨時表或表變數:
溫度表:
DROP TABLE IF EXISTS #c;
SELECT
course, COUNT(pname) as num_of_students
INTO #c
FROM Studies
GROUP BY course;
SELECT
c.course, c.num_of_students
FROM #c c
WHERE
c.num_of_students < (SELECT AVG(c.num_of_students) FROM c);
DROP TABLE #c;
表變數:
DECLARE @c TABLE (
course VARCHAR(100),
num_of_students INT
);
INSERT @c (course, num_of_students)
SELECT course, COUNT(pname)
FROM Studies
GROUP BY course;
SELECT
c.course, c.num_of_students
FROM @c c
WHERE
c.num_of_students < (SELECT AVG(c.num_of_students) FROM c);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404965.html
標籤:
