在 ibm db2 中使用 min 和 count from 2 different table

use of min and count from 2 different table in ibm db2

如何显示哪个导师教的科目最少?

这是我的语法,但我得到

Error code 42607

select 
  tut_id, 
  min(count(session_code)) as subject_taught 
from 
  tutor,
  class  
where 
  tutor.tutor id = class.tut_id 
group by tut_id

预期输出:

tut_id  subject_taught 
  id2          1

我现在没有可用的 DB2,但据我所知here您不能在 DB2 中嵌套聚合函数:

$... min(count(session_code))...

这很简单:

WITH Subjects_Taught AS (SELECT tutor_id, COUNT(*) AS subjects_taught
                         FROM Class
                         GROUP BY tutor_id)

SELECT tutor_id, subjects_taught
FROM Subjects_Taught
WHERE subjects_taught = (SELECT MIN(subjects_taught)
                         FROM Subjects_Taught)

SQL Fiddle Example


那么声明中到底发生了什么?

首先,常见的Table表达式->

WITH Subjects_Taught AS (SELECT tutor_id, COUNT(*) AS subjects_taught
                         FROM Class
                         GROUP BY tutor_id)

这定义了一个 in-query 视图或临时 table。这些对于抽象某些细节很方便,或者当您最终在声明中引用相同的信息两次时(就像我们在这里所做的那样)。本质上,你最终得到一个看起来像这样的 table:

id1 | 2
id2 | 1
id3 | 2

...所以唯一剩下的就是将我们自己限制在满足最小值的 this table 行:

WHERE subjects_taught = (SELECT MIN(subjects_taught)
                         FROM Subjects_Taught)

...我们第二次引用我们的虚拟 table,得到最小值,就好像它是一个正常的 table。