在PostgreSQL中找到最小的值

时间:2013-10-22 14:55:05

标签: 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 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而不是整数。

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

1 个答案:

答案 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