网站链接: 我爱捣鼓
当前位置: 首页 > 数据库  > SQL Server

查询每个在商城消费超过2000元的用户记录

2021/2/22 21:25:52

假如用户消费表Orders的结构如下:O_IdOrderDateOrderPriceCustomer12008/12/291000Bush22008/11/231600Carter32008/10/05700Bush42008/09/28300Bush52008/08/062000Adams62008/07/21100Carter现在,我们希望查找订单总金额大于 2000 的客户。这里我们需要用到GROUP BY和…


假如用户消费表Orders的结构如下:

O_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter

现在,我们希望查找订单总金额大于 2000 的客户。

这里我们需要用到GROUP BYHAVING

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)>2000


  • GROUP BY的用法

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。

GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。


  • 常用聚合函数

count() 计数

sum() 求和

avg() 平均数

max() 最大值

min() 最小值

  • 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;


  • HAVING的用法

当然提到GROUP BY 我们就不得不提到HAVING,HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。

我们举个例子:

每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。

语句如下:


SELECT
    ( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
    count( de.emp_no ) AS 人数 
FROM
    dept_emp de 
WHERE
    de.to_date = '9999-01-01' 
GROUP BY
    de.dept_no 
HAVING
    count( de.emp_no ) > 30000


相关资讯

  • 教你sql server突破编辑200行限制,到1000行2000行

    sql server默认的编辑行数限制是200,如果我们想编辑1000行,怎么设置呢?我们可以按照一下步骤去设置就可以了工具-->选项-->sql server对象资源管理器-->命令-->将编辑前xxx行设定0如果还是不懂,可以按照以下图片去进行设置

    2021/2/22 21:39:26
  • Sql Server查询2两个时间间隔的天数、秒数、分数、小时数

    我们经常在查询数据时需要近7天,近1个月,近1年的数据,需要用到datediff函数,具体使用如下所示:select datediff(year, 开始日期,结束日期); --两日期间隔年select datediff(quarter, 开始日期,结束日期); --两日期间隔季select datediff(month, 开始日期,结束日期); …

    2021/2/22 21:14:46