在PostgreSQL中查找最小值

在PostgreSQL中查找最小值,sql,postgresql,count,varchar,min,Sql,Postgresql,Count,Varchar,Min,考虑以下数据库设置: 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

考虑以下数据库设置:

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);
但我得到了一个错误,说“组中的学生”不存在。 我还尝试过使用子查询并在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,我需要计数,而不是整数

编辑:忘记添加查询/搜索应仅显示最小的组。这才是真正的问题。我也尝试过用所有的组创建一个视图,然后要求最小的一个,但出于某种原因,它最终打印了整个视图

试试这个:

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

抱歉,我忘记添加该查询应仅显示最小的组。只需在查询末尾添加“限制1”。“orderby”完成排序工作,然后将输出限制为仅第一条记录。