在 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)
那么声明中到底发生了什么?
首先,常见的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。
如何显示哪个导师教的科目最少?
这是我的语法,但我得到
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)
那么声明中到底发生了什么?
首先,常见的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。