![]() |
坚韧的跑步鞋 · Stata_Blogs/Stata新命令-p ...· 4 月前 · |
![]() |
呐喊的猴子 · 牛佬和邱瑞新这两个罕见算不算是港漫里画风最差 ...· 5 月前 · |
![]() |
无邪的楼房 · Apache Shiro ...· 5 月前 · |
![]() |
开朗的枕头 · CorelDRAW2021版本下载 ...· 6 月前 · |
![]() |
好帅的苦咖啡 · 建设更高水平的平安上海、法治上海,陈吉宁在市 ...· 7 月前 · |
我有一个名为“Take”的表,其中包含以下信息。Take(stud_id,class_id,sec_id,semester,year,grade)
我想找出2009年上课次数比2010年多的学生的id(就班数而言)。我使用以下代码提取了2009年的学生总班数,但不确定如何进行比较
select stud_id, count(class_id) from Takes where year = 2009 group by stud_id;
这不是最有效的查询,但您可以尝试这样做:
SELECT aa.Stud_id
FROM ( SELECT Stud_id, Year, COUNT(Class_id) Class_id
FROM Takes
GROUP BY Stud_id, Year) aa
WHERE aa.Year = 2009
AND aa.Class_id > (SELECT bb.Class_id
FROM ( SELECT Stud_id, Year, COUNT(Class_id) Class_id
FROM Takes
GROUP BY Stud_id, Year) bb
WHERE aa.Stud_id = bb.Stud_id AND bb.Year = 2010);
通过立即应用
WHERE
子句并使用
HAVING
进行计数比较,这将变得更加有效:
SELECT aa.Stud_id
FROM Takes aa
WHERE aa.Year = 2009
GROUP BY aa.Stud_id
HAVING COUNT(*) >
SELECT COUNT(*)
FROM Takes bb
WHERE bb.Stud_id = aa.Stud_id
AND bb.Year = 2010
);
您可以使用条件聚合(聚合函数中的
CASE WHEN
)和
HAVING
子句:
select
stud_id,
count(case when year = 2009 then 1 end) as classes_in_2009,
count(case when year = 2010 then 1 end) as classes_in_2010
from takes
group by stud_id
having count(case when year = 2009 then 1 end) >
count(case when year = 2010 then 1 end);