SELECT empid, OrderYear=YEAR(orderdate), Numbers=COUNT(*)
FROM Sales.Orders
WHERE custid=71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*)>1
ORDER BY empid, OrderYear
SQL逻辑查询语句执行顺序
- FROM:从Sales.Orders表中查询行;
- WHERE:筛选出custid=71的订单;
- GROUP BY:根据empid, YEAR(orderdate)对订单进行分组;
- HAVING:筛选出大于1个订单的组;
- SELECT:返回每组的雇员ID、订单年度、订单数量;
- ORDER BY:按照雇员ID、订单年度排序;
FROM
FROM子句是逻辑化处理的第一个查询子句,此子句指定要查询的表名称和进行多表运算的表运算符。
WHERE
在WHERE子句中,可以指定一个谓词或逻辑表达式来筛选由FROM阶段返回的行。只有逻辑表达式计算结果为TRUE的行,由WHERE阶段返回到后面的逻辑查询处理阶段。
GROUP BY
GROUP BY阶段允许用户把前面逻辑查询处理阶段返回的行排列到组中,组是根据你在GROUP BY子句中指定的元素而确定的。GROUP BY阶段会为WHERE阶段返回的数据,根据指定的元素的每一个唯一组合生成一个组。如果查询涉及分组,那么GROUP BY阶段后的所有阶段(包括HAVING、SELECT和ORDER BY)都必须是对组的操作,而不是对单个行进行操作。
不参与GROUP BY列表中的元素仅允许作为一个聚合函数的输入,如COUNT、SUM、AVG、MIN、MAX等。在GROUP BY子句之后处理的