两个COUNT相关SQL统计查询的正确语法写法咨询
两类SQL销售统计查询正确写法
你之前写的SQL存在3个核心语法/逻辑错误:
- 比较运算符写法错误:SQL中小于等于的标准写法是
<=,不存在=<的写法 - 缺少分组逻辑:统计「每位销售人员」的聚合数据,必须搭配
GROUP BY子句按销售人员维度分组 - 聚合结果过滤位置错误:
WHERE子句只能过滤原始表的行数据,针对COUNT/SUM这类聚合函数计算结果的过滤条件,必须写在HAVING子句中
a) 统计上一周期内销售笔数少于3笔的每位销售人员的销售数量
正确语法参考:
SELECT SalesPerson, SUM(SalesAmount) AS TotalSalesQuantity, -- 统计对应销售总数量/总金额 COUNT(*) AS TotalSalesOrders -- 统计销售笔数,可用于结果校验 FROM SALES1 WHERE -- 此处替换为你判断「上一周期」的时间过滤条件,例:SalesDate BETWEEN '2024-05-01' AND '2024-05-31' GROUP BY SalesPerson HAVING COUNT(*) < 3; -- 筛选销售笔数少于3笔的分组
如果你的需求里「销售数量」是指销售笔数,直接把SUM(SalesAmount)替换成COUNT(*)即可。
b) 统计上一周期内累计销售总金额小于等于£300的每位销售人员的销售笔数
正确语法参考:
SELECT SalesPerson, COUNT(*) AS TotalSalesOrders, -- 统计对应销售笔数 SUM(SalesAmount) AS TotalSalesAmount -- 统计累计销售总金额,可用于结果校验 FROM SALES1 WHERE -- 此处替换为你判断「上一周期」的时间过滤条件 GROUP BY SalesPerson HAVING SUM(SalesAmount) <= 300; -- 筛选累计总金额≤300英镑的分组
注意:如果
SalesAmount字段是带货币符号的字符串类型,需要先转换为数值类型再做求和计算;如果字段本身是数值类型,直接用数值300做判断即可,英镑为业务层面的计量单位,不需要在SQL条件中额外拼接符号。
内容的提问来源于stack exchange,提问作者CodeGirl2022
相关产品推荐
相关产品推荐

