考虑以下数据库设置:
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是username,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);
但是我收到一条错误,说student_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 :(得分: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