SQL数据库查询基本问题

时间:2010-10-28 01:56:38

标签: sql database aggregate-functions

关系模式:

  • 员工(Enum,Ename)
  • VentingMac(Enum,Cokename,day)

VentingMac关系中的属性Enum是引用Employee关系的外键。

我想列出所有员工姓名(Ename),他们在同一天喝超过3(不同)的可乐 (假设他们每天不喝同样的可乐)

1 个答案:

答案 0 :(得分:2)

使用EXISTS

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)

使用JOIN:

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

击穿

查询的核心在于检查VENTINGMAC表,特别是使用聚合函数(这意味着需要GROUP BY子句)。我假设VENTINGMAC.day仅包含DATE(年,月,日) - 没有时间部分使事情复杂化。您需要对此人进行分组,并且表格中的日期可以计算coke条款中显示的HAVING值。