【问题标题】:sql find max same subject in two tablesql在两个表中找到最大相同的主题
【发布时间】:2016-02-29 11:57:58
【问题描述】:

问。让一个部门的规模是教师人数加上学生人数。找出最大部门的名称。

select dept_name
from(select dept_name,count(id) as people from instructor group by dept_name
union
select dept_name,count(id) as people from student group by dept_name)
having count(id)=(select max(A.people)
                  from (select count(id) as people
                        from (select dept_name,count(id) as people 
                        from instructor 
                        group by dept_name
                        union
                        select dept_name,count(id) as people 
                        from student 
                        group by dept_name)
                        group by dept_name) as A)

教师表视图:

学生桌视图:

[在此处输入图片描述][3]

结果是 Comp.Sci。

【问题讨论】:

  • 您的查询结果如何?预期的结果是什么?你到底有什么问题?
  • 注意:如果您使用 sqlfiddle.com 创建示例,人们会更容易帮助您。没有人喜欢从屏幕截图中重新创建表格和样本数据。
  • 结果是 Comp.Sci.

标签: mysql


【解决方案1】:
  select top 1 dept_name from
(
  select dept_name, sum(student_num + inst_num)
    from(
    select dept_name, 0 as student_num, count(id) as inst_num from instructor group by dept_name
        union all
    select dept_name,count(id) as student_num, 0 as inst_num from student group by dept_name
    )t group by t.dept_name
    order by sum(student_num + inst_num) desc
)

【讨论】:

    【解决方案2】:
    SELECT COUNT(*) + 
    (SELECT COUNT(*) FROM student where dept_name = t1.dept_name) as total_member,
    t1.dept_name FROM instructor 
    GROUP BY t1.dept_name 
    ORDER BY total_member DESC
    LIMIT 1
    

    【讨论】:

      【解决方案3】:

      我用我的测试样本数据库进行了测试,它可以工作!

      它也应该适合你。要包含重复记录,您可以考虑使用 UNION ALL,如下所示:

      SELECT MAX(total),dept_name 
      FROM (
      SELECT count(a.dept_name) as total,a.dept_name 
      from student a left join instructor b ON a.dept_name = b.dept_name GROUP BY a.dept_name
      union all select count(c.dept_name) as total,c.dept_name
      from instructor c RIGHT JOIN student d ON  c.dept_name = d.dept_name group by c.dept_name) combine_table
      

      【讨论】:

      • 小心UNION,当部门的学生和导师人数相同时,UNION会删除重复记录!
      • 我们可以使用 UNION ALL 代替。
      • 不过,dept_name 不包含在聚合函数或 GROUP BY 子句中。
      • 是的,如果你看到 count(a.dept_name) 和 count(b.dept_name)
      • 我给你一个挑战你介意吗?看看这里。
      猜你喜欢
      • 2021-12-27
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多