SQL数据库查询基本问题
关系模式:SQL数据库查询基本问题,sql,database,aggregate-functions,Sql,Database,Aggregate Functions,关系模式: 员工(枚举,Ename) VentingMac(枚举、Cokename、日) VentingMac关系中的属性Enum是一个外键,引用关系Employee 我想列出所有员工的名字(Ename),他们在同一天喝了超过3杯(不同的)可乐 (假设他们不会每天喝相同的可乐) 用于 使用联接: 崩溃 查询的核心在于检查VENTINGMAC表,特别是使用聚合函数(这意味着需要GROUPBY子句)。我假设VENTINGMAC.day只包含一个日期(年、月、日)——没有时间部分来使事情复杂化。您
- 员工(枚举,Ename)
- VentingMac(枚举、Cokename、日)
Enum
是一个外键,引用关系Employee
我想列出所有员工的名字(Ename),他们在同一天喝了超过3杯(不同的)可乐
(假设他们不会每天喝相同的可乐)
用于
使用联接:
崩溃
查询的核心在于检查VENTINGMAC表,特别是使用聚合函数(这意味着需要GROUPBY子句)。我假设
VENTINGMAC.day
只包含一个日期(年、月、日)——没有时间部分来使事情复杂化。您需要根据表中的人员和日期分组,以便能够计算coke
值,就像您在HAVING
子句中看到的那样。hmm。。。这闻起来像是一个家庭作业问题。事实上,我很确定我去年在DB管理课上遇到了几乎完全相同的问题。我不明白为什么你接受了一个使用内置聚合函数的答案,当你说你不能使用一个时…????是的,很抱歉这是我的一个错误,我们可以使用它。我想我应该编辑一下。对不起,误会了
SELECT e.ename
FROM EMPLOYEE e
WHERE EXISTS(SELECT NULL
FROM VENTINGMAC vm
WHERE vm.enum = e.enum
GROUP BY vm.day, vm.enum
HAVING COUNT(vm.coke) > 3)
SELECT e.ename
FROM EMPLOYEE e
WHERE e.enum IN (SELECT vm.enum
FROM VENTINGMAC vm
GROUP BY vm.day, vm.enum
HAVING COUNT(vm.coke) > 3)
SELECT e.ename
FROM EMPLOYEE e
JOIN (SELECT vm.enum
FROM VENTINGMAC vm
GROUP BY vm.day, vm.enum
HAVING COUNT(vm.coke) > 3) y ON y.enum = e.enum