考虑以下数据库设置:
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 我需要计数而不是整数。
编辑:忘记添加查询/搜索应该只显示最小的组。这才是真正的问题。我也尝试过创建一个包含所有组的视图,然后要求最小的一个,但由于某种原因,它最终打印了整个视图。