SQL语句练习实例之二——找出销售冠军

代码如下:

--销售冠军
--问题:在公司中,老板走进来,要一张每个地区销量前3名的销售额与销售员的报表
---
create table salesdetail
(
Area int not null,
Saler nvarchar(20) not null,
SalerId int not null,
Sales money not null
)
insert salesdetail
select 1,'张三',15,3000
union select 1,'赵一',16,3500
union select 1,'钱二',17,4000
union select 1,'孙三',18,5000
union select 1,'李四',19,5000
union select 1,'王五',11,7000
union select 2,'周边一',25,3000
union select 2,'李白',22,4000
union select 2,'张镇东',23,6000
union select 2,'李宁',24,1000
union select 3,'李斯',35,3000
union select 3,'李勇',33,2000
union select 4,'李逵',44,5000
union select 4,'宋江',45,5000
union select 4,'吴用',42,13000
union select 4,'公孙胜',43,23000
union select 5,'阮小二',51,5000
union select 5,'阮小五',52,5000
union select 5,'林冲',53,5000
union select 5,'林莽',54,6000
go
---以下这种写法SQL语句会主动把最小的那一个销售额的所有行,都自动删除,只能得到比最小销售额大的数据
--如果你的最小销售额有3行,最大的只有一行,如地区5所示,只会得到最大的那一行。
--地区4只能得到二行,原因同上。
select * from salesdetail as a
where sales >= (select min(b.sales)
from salesdetail as b where a.Area=b.Area and a.Sales<=b.Sales
--group by sales
having COUNT(distinct b.Saler)<=3)
order by a.Area,a.Sales desc,a.Saler,a.SalerId
go
---使用rank()为每个分区中的每一行分配一个顺序号,如果有重复值,它们都将分配相同的顺序号。
select a.area,a.saler,seq from
(
select area,saler,RANK() over(PARTITION by area order by sales desc) as seq from salesdetail
)a where seq<=3
drop table salesdetail

(0)

相关推荐

  • SQL语句练习实例之五 WMS系统中的关于LIFO或FIFO的问题分析

    复制代码 代码如下: ---在仓储管理中经常会碰到的一个问题 一.关于LIFO与FIFO的简单说明 ---FIFO: First in, First out.先进先出. ---LIFO: Last in, First out.后进先出. --如货物A:本月1日购买10件,单价10元/件,3日购买20件,单价15元/件:10日购买10件,单价8元/件. --本月15日发货35件. --按FIFO先进先出,就是先购入的存货先发出,所以,先发1日进货的10件,再发3日进货的20件,最后发10日进货的5

  • SQL语句练习实例之四 找出促销活动中销售额最高的职员

    复制代码 代码如下: ---找出促销活动中销售额最高的职员 ---你刚在一家服装销售公司中找到了一份工作,此时经理要求你根据数据库中的两张表得到促销活动销售额最高的销售员 ---1.一张是促销活动表 ---2.一张是销售客列表 create table Promotions ( activity nvarchar(30), sdate datetime, edate datetime ) insert Promotions select '五一促销活动','2011-5-1','2011-5-7

  • SQL语句练习实例之三——平均销售等待时间

    复制代码 代码如下: ---1.平均销售等待时间 ---有一张Sales表,其中有销售日期与顾客两列,现在要求使用一条SQL语句实现计算 --每个顾客的两次购买之间的平均天数 --假设:在同一个人在一天中不会购买两次 create table sales ( custname varchar(10) not null, saledate datetime not null ) go insert sales select '张三','2010-1-1' union select '张三','20

  • SQL语句练习实例之六 人事系统中的缺勤(休假)统计

    复制代码 代码如下: ---这是一个人事系统中的示例,要求记录一下员工的缺勤情况 ---1.要在表中记录一下缺勤计分,是对经常缺勤者的一种处罚性计分 ---规则: ---1.如果员工在一年内的缺勤计分达到50,就会可以解雇该员工. ---2.如果员工缺勤连续超过一天,就视为长病假,这时,第二天,第三天及以后的天数都不会统计该员工的缺勤计分 ----这些天也不算为缺勤. create table absence ( empId int not null, absenceDate datetime

  • SQL语句练习实例之一——找出最近的两次晋升日期与工资额

    复制代码 代码如下: --程序员们在编写一个雇员报表,他们需要得到每个雇员当前及历史工资状态的信息, --以便生成报表.报表需要显示每个人的晋升日期和工资数目. --如果将每条工资信息都放在结果集的一行中,并让宿主程序去格式化它. --应用程序的程序员都是一帮懒人,他们需要在每个雇员的一行上得到当前 --和历史工资信息.这样就可以写一个非常简单的循环语句. ---示例: create table salaries ( name nvarchar(50) not null, sal_date da

  • SQL语句练习实例之七 剔除不需要的记录行

    复制代码 代码如下: --相信大家肯定经常会把数据导入到数据库中,但是可能会有些记录行的所有列的数据是null,这为null的数据是我们不需要 --现在需要一个简单的查询来剔除掉这些为null的记录行. --假设表名为 emplyees --方法1. ---先把数据导入到数据库 ---其次: select * from sys.columns where object_id =(select object_id from sys.objects where name='EMPLYEEs') --

  • SQL语句练习实例之二——找出销售冠军

    复制代码 代码如下: --销售冠军 --问题:在公司中,老板走进来,要一张每个地区销量前3名的销售额与销售员的报表 --- create table salesdetail ( Area int not null, Saler nvarchar(20) not null, SalerId int not null, Sales money not null ) insert salesdetail select 1,'张三',15,3000 union select 1,'赵一',16,3500

  • Mybatis基于注解形式的sql语句生成实例代码

    对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方式,可能以后会逐渐完善起来.第一次写博客,写的简单点. package com.bob.config.mvc.mybatis; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retenti

  • PHP实现的构造sql语句类实例

    本文实例讲述了PHP实现的构造sql语句类.分享给大家供大家参考,具体如下: /** * @package Database Class * @author injection (mail:injection.mail@gmail.com) * @version 1.0 */ @ini_set( 'display_errors',0 ); class DataBase{ private $mDb_host,$mAb_user,$mAb_pwd,$mConn_No; function DataBa

  • Java使用Statement接口执行SQL语句操作实例分析

    本文实例讲述了Java使用Statement接口执行SQL语句操作的方法.分享给大家供大家参考,具体如下: Statement执行SQL语句: 1. 对数据库的曾删改操作时,使用stmt.executeUpdate(sql)  执行给定 SQL 语句,分别为 insert .update.delete. 2. 对数据库做查询时,直接使用 stmt.executeQuery(sql),返回结果可以为一个resultSet结果集. 首先做一些准备工作: ①对要进行操作的数据库表进行封装,比如说我的数

  • SQL语句(T-SQL汇总) 用T-SQL画出这些图形

    我个人感觉数据库这方面对于程序员来说很重要,无论是对于JAVA程序员还是DOTNET程序员以及其他编程人员来说都是必须掌握的.为了帮助大家更好的来回顾T-SQL,本人利用空闲的时间整理的一下T-SQL的语句和语法.希望对大家有用! 好的!我们先来看几个图像: 棱形三角形正方形圆形矩形梯形 上面这些图形都是用T-SQL实现的,文章的最后我们一起来用T-SQL画出这些图形. 首先,我们开始回顾一下T-SQL的基本语法: 函数 abs(x):求绝对值: 例: select abs(-3) 值为:3 s

随机推荐