2013-10-22 49 views
-1

最小值考慮以下數據庫設置:發現PostgreSQL中

CREATE TABLE ClassStud (

uname varchar(10) NOT NULL, 

classcode varchar(7) NOT NULL, 

grnr varchar(8), 

sem varchar(6) NOT NULL 
); 

INSERT INTO ClassStud(uname,classcode, grnr,sem) VALUES ('oscali', 'inf1000', 'group1', '2013-2'); 
INSERT INTO ClassStud(uname,classcode, grnr,sem) VALUES ('oscali', 'inf1300', 'group2', '2013-2'); 
INSERT INTO ClassStud(uname,classcode, grnr,sem) VALUES ('axelboi', 'inf1100', 'group3', '2013-2'); 
INSERT INTO ClassStud(uname,classcode, grnr,sem) VALUES ('fredrbhe', 'inf2100', 'group2', '2013-2'); 
INSERT INTO ClassStud(uname,classcode, grnr,sem) VALUES ('vetleoj', 'inf2200', 'group6', 2013-2'); 

隨着UNAME是用戶名,grnr是groupnumber和SEM作爲學期。

我想弄清楚的是如何找到成員數量最少的組(無論課程/課程)。我一直堅持這個問題幾個小時,甚至搜索網絡,我沒有找到太多的幫助或引導我在正確的方向。

我嘗試了這種方式

SELECT classcode, grnr, COUNT(uname) AS students_in_group 
FROM ClassStud 
WHERE grnr is NOT NULL 
AND sem LIKE '2013-2' 
GROUP BY classcode, grnr 
HAVING MIN(students_in_group); 

,但我得到一個錯誤說students_in_group不存在。 我也嘗試過使用子查詢,並且在SELECT中輸入MIN()沒有運氣。

SELECT classcode, grnr, MIN(students) 
FROM (
SELECT count(uname) AS students FROM ClassStud) AS s, ClassStud 
WHERE grnr IS NOT null 
AND sem LIKE '2013-2' 
GROUP BY classcode, grnr; 

這裏的問題是它是一個VARCHAR我需要計數,而不是一個整數。

編輯:忘了補充說查詢/搜索應該只顯示最小的組。這是真正的問題。我也嘗試創建一個與所有組的視圖,然後要求最小的一個,但由於某種原因,它最終打印整個視圖。

回答

0

也許試試這個:

SELECT classcode, grnr, COUNT(uname) AS students_in_group 
FROM ClassStud 
WHERE grnr is NOT NULL 
AND sem LIKE '2013-2' 
GROUP BY classcode, grnr 
Order by count(uname) 
LIMIT 1 
+0

對不起,我忘了補充一點,查詢只顯示最小的組。 –

+0

只需在查詢的末尾添加「LIMIT 1」即可。 'ORDER BY'完成排序工作,然後將輸出限制爲第一條記錄。 – BWS

+0

omg,哈哈。現在我感到很蠢! TY非常! –