【问题标题】:How to compare count of columns with each other in group by groups and find the max of them如何逐组比较列数并找到它们的最大值
【发布时间】:2018-03-03 07:41:45
【问题描述】:

首先请参考http://sqlfiddle.com/#!9/7b458/我创建的数据库。 (MYSQL) 现在我有一个问题要找出在哪门课程中最多有多少学生已经入学。 这就是我的前进方式

select course_name from `course-taken`
natural join course;

select course_name,count(course_name) from `course-taken`
natural join course
group by course_name;

参考http://sqlfiddle.com/#!9/7b458/6

现在的问题是我如何从计数中找到最大值(课程名称) 我试过 Max(count(course_name) [http://sqlfiddle.com/#!9/7b458/7] 但这表明

X 组函数使用无效

所以请任何人帮助我正确查询。
提前致谢。

【问题讨论】:

  • 提示:在表/列标识符中的任何位置包含“-”是绝对灾难的秘诀。
  • 问题解决了。谢谢大家。
    但是现在,如果让问题变得更加困难,请找出本月最多录取的学生人数。我已经解决了更新数据库的问题 - sqlfiddle.com/#!9/417e20 & quary sqlfiddle.com/#!9/417e20/1。所以我想知道我是否可以更轻松地做到这一点,或者可以让这个采石场变短

标签: mysql sql database join sqlfiddle


【解决方案1】:

只需在GROUP BY 子句后添加HAVING 子句即可获得最多的 course_name 记录

HAVING count(course_name) = ( 
                              SELECT max(maxc) FROM 
                         (
                           SELECT course_name, count(course_name) maxc 
                           FROM `course-taken`
                           NATURAL JOIN course
                           GROUP BY course_name)cnt
                         )

【讨论】:

  • 感谢 YOGESH 解决了我的问题
【解决方案2】:

如果您希望课程数量最多,并且第一名没有平局,或者您可以容忍返回单个记录,那么您可以在此处使用LIMIT

SELECT course_name, COUNT(course_name) AS cnt
FROM course-taken
NATURAL JOIN course
GROUP BY course_name
ORDER BY COUNT(course_name) DESC
LIMIT 1;

【讨论】:

  • 感谢您的帮助,但我认为 YOGESH 已经给了我完美的答案
  • @k.dot 你为什么对我大喊大叫?
  • 对不起,我没有那个意图
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
相关资源
最近更新 更多