首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个Count()值sql

比较两个Count()值sql
EN

Stack Overflow用户
提问于 2021-10-15 06:12:26
回答 3查看 50关注 0票数 0

我有一个名为“Take”的表,其中包含以下信息。Take(stud_id,class_id,sec_id,semester,year,grade)

我想找出2009年上课次数比2010年多的学生的id(就班数而言)。我使用以下代码提取了2009年的学生总班数,但不确定如何进行比较

代码语言:javascript
运行
复制
select stud_id, count(class_id) from Takes where year = 2009 group by stud_id;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-15 07:06:15

您可以使用条件聚合(聚合函数中的CASE WHEN)和HAVING子句:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2021-10-15 06:50:00

这不是最有效的查询,但您可以尝试这样做:

代码语言:javascript
运行
复制
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进行计数比较,这将变得更加有效:

代码语言:javascript
运行
复制
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
);
票数 1
EN

Stack Overflow用户

发布于 2021-10-15 08:46:53

根据dbms的不同,2009年的left join 2010可能会加快速度:

代码语言:javascript
运行
复制
select t2009.stud_id, t2009.cnt, t2010.cnt
from
 (select stud_id, count(*) as cnt
  from takes
  where year = 2009
  group by stud_id) t2009
LEFT JOIN
 (select stud_id, count(*) as cnt
  from takes
  where year = 2010
  group by stud_id) t2010
ON t2009.stud_id = t2010.stud_id AND t2009.cnt > t2010.cnt

(假设对年份列进行了索引。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69580574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档