sql分类查询问题

derek3 2010-06-28 05:34:48
想完成一个统计各类销售冠军的查询
例如:
书名 销售量 类别
春哥自传 100 自传
我的奋斗 99 自传
一座城池 100 小说
他的国 99 小说
查询后的结果为:
书名 销售量 类别
春哥自传 100 自传
一座城池 100 小说


小弟谢谢了先!

...全文
168 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlq_zist 2010-06-30
  • 打赏
  • 举报
回复
是被我和谐了,不是CSDN。
hlq_zist 2010-06-30
  • 打赏
  • 举报
回复
晕 有的空格被和谐了~~ 重贴


create table T_Book_Sale(
BookName nvarchar(50) null,
SaleNum int null,
Class nvarchar(10) null
)




insert into T_Book_Sale select N'红岩',16009,N'小说'

insert into T_Book_Sale select N'朝花夕拾',25410,N'散文集'

insert into T_Book_Sale select N'庐山文化评传',45410,N'散文集'

insert into T_Book_Sale select N'暴风骤雨',17069,N'小说'

insert into T_Book_Sale select N'糖果',45410,N'散文集'



select Class,max(SaleNum) SaleNum into #Result from T_Book_Sale group by Class

select a.* from T_Book_Sale a inner join #Result b

on a.Class=b.Class and a.SaleNum=b.SaleNum

drop table #Result

hlq_zist 2010-06-30
  • 打赏
  • 举报
回复


/*Execute in SQL Server 2000*/
create table T_Book_Sale(
BookName nvarchar(50) null,
SaleNum int null,
Class nvarchar(10) null
)




insert into T_Book_Saleselect N'红岩',16009,N'小说'

insert into T_Book_Saleselect N'朝花夕拾',25410,N'散文集'

insert into T_Book_Sale select N'庐山文化评传',45410,N'散文集'

insert into T_Book_Saleselect N'暴风骤雨',17069,N'小说'

insert into T_Book_Saleselect N'糖果',45410,N'散文集'



select Class,max(SaleNum) SaleNum into #Result from T_Book_Sale group by Class

select a.* from T_Book_Sale a inner join #Result b

on a.Class=b.Class and a.SaleNum=b.SaleNum

drop table #Result


这样应该可以了!!!
hl362496158 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hl362496158 的回复:]
弄了下刚开始以为出来了,后来发现自己犯了和楼上各位都犯了的一个错误:
加入小说类有两本书都是一样的销售两且都是销售冠军,好像用 select 1,或select top 1 是不行的吧

书名 销售量 类别
春哥自传 100 自传
我的奋斗 99 自传
一座城池 100 小说
信春哥得永生 100 小说
他的国 99 小说
查询后的结果为:
……
[/Quote]
所以就没 传语句上去了,同样期待解答!
wihtsky 2010-06-30
  • 打赏
  • 举报
回复

select max(书名),max(销售量),类别 from Table group by 类别 order by 销售量 desc
hl362496158 2010-06-30
  • 打赏
  • 举报
回复
弄了下刚开始以为出来了,后来发现自己犯了和楼上各位都犯了的一个错误:
加入小说类有两本书都是一样的销售两且都是销售冠军,好像用 select 1,或select top 1 是不行的吧

书名 销售量 类别
春哥自传 100 自传
我的奋斗 99 自传
一座城池 100 小说
信春哥得永生 100 小说
他的国 99 小说
查询后的结果为:
书名 销售量 类别
春哥自传 100 自传
一座城池 100 小说
信春哥得永生 100 小说
vasilyben 2010-06-30
  • 打赏
  • 举报
回复
select max(SellNum),kind,max(BookName) from BookData group by BookKind order by BookKind
Johan. 2010-06-30
  • 打赏
  • 举报
回复
IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME = 'BookData')
DROP TABLE BookData
GO
CREATE TABLE BookData
(
BookName VARCHAR(100),
SellNum INT,
BookType VARCHAR(100)
)

--测试数据
INSERT INTO BookData VALUES('春哥自传',100,'自传')
INSERT INTO BookData VALUES('我的奋斗',99,'自传')
INSERT INTO BookData VALUES('一座城池',100,'小说')
INSERT INTO BookData VALUES('他的国',99,'小说')


SELECT A.BookName,A.SellNum,A.BookType FROM BookData A
WHERE A.BookName IN (
SELECT TOP (1) B.BookName FROM BookData B WHERE A.BookType = B.BookType
ORDER BY B.SellNum DESC
)
xiaozy19850320 2010-06-30
  • 打赏
  • 举报
回复
这年头什么人都有,自己不动脑想想,永远不会进步
nocallstle 2010-06-30
  • 打赏
  • 举报
回复

create table BookData
(
BookName varchar(100),
SellNum int,
BookType varchar(100)
)

--测试数据
insert into BookData values('春哥自传',100,'自传')
insert into BookData values('我的奋斗',99,'自传')
insert into BookData values('一座城池',100,'小说')
insert into BookData values('他的国',99,'小说')
insert into BookData values('我的奋斗',399,'自传')
insert into BookData values('他的国',997,'小说')
insert into BookData values('我的奋斗',399,'自传2')
insert into BookData values('他的国',97,'小说2')


--


WITH a AS
(
SELECT MAX(SellNum) AS maxMun, BookType FROM dbo.BookData GROUP BY BookType
)
SELECT b.BookName,a.* FROM a INNER JOIN dbo.BookData AS b ON a.BookType = b.BookType AND a.maxMun=b.SellNum

GlyphVectory 2010-06-30
  • 打赏
  • 举报
回复

create table BookData
(
BookName varchar(100),
SellNum int,
BookType varchar(100)
)

--测试数据
insert into BookData values('春哥自传',100,'自传')
insert into BookData values('我的奋斗',99,'自传')
insert into BookData values('一座城池',100,'小说')
insert into BookData values('他的国',99,'小说')
insert into BookData values('我的奋斗',399,'自传')
insert into BookData values('他的国',997,'小说')
insert into BookData values('我的奋斗',399,'自传2')
insert into BookData values('他的国',97,'小说2')
--创建参数表
declare @tabl table(
SellNum int,BookType varchar(50)
)
--得到分组
insert @tabl select SellNum=isnull(max(SellNum),0),BookType from BookData group by BookType
--根据分组查询
select distinct c.* from (select * from @tabl)b
inner join BookData c on c.SellNum =b.SellNum and c.BookType =b.BookType
测试OK。。。
vary25 2010-06-29
  • 打赏
  • 举报
回复
select max(SellNum),kind,max(BookName) from BookData group by BookKind
笑道江湖情 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 newdigitime 的回复:]
楼上是否忘了order by
[/Quote]
--谢谢提醒
--查询语句
select * from BookData A
where BookName in
(
select top 1 BookName from BookData B
where A.BookType=B.BookType
order by B.SellNum desc
)
jsjhj2008 2010-06-28
  • 打赏
  • 举报
回复
select * from BookData
where SellNum =(select top 1 SellNum from BookData order by SellNum desc)
newdigitime 2010-06-28
  • 打赏
  • 举报
回复
楼上是否忘了order by
笑道江湖情 2010-06-28
  • 打赏
  • 举报
回复

create table BookData
(
BookName varchar(100),
SellNum int,
BookType varchar(100)
)
--测试数据
insert into BookData values('春哥自传',100,'自传')
insert into BookData values('我的奋斗',99,'自传')
insert into BookData values('一座城池',100,'小说')
insert into BookData values('他的国',99,'小说')

--查询语句
select * from BookData A
where BookName in
(
select top 1 BookName from BookData B
where A.BookType=B.BookType
)
jiangshun 2010-06-28
  • 打赏
  • 举报
回复

--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([书名] varchar(8),[销售量] int,[类别] varchar(4))
insert [TB]
select '春哥自传',100,'自传' union all
select '我的奋斗',99,'自传' union all
select '一座城池',100,'小说' union all
select '他的国',99,'小说'

select * from TB T
where not exists(select 1 from TB where [销售量]>t.[销售量] and [类别]=t.[类别])


/*
书名 销售量 类别
-------- ----------- ----
春哥自传 100 自传
一座城池 100 小说

(2 行受影响)

*/

drop table [TB]
derek3 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xys_777 的回复:]
SQL code
select * from tb t
where 销售量=(top max(销售量) from tb where 类别= t.类别)
[/Quote]
....sql说top附近有语法错误
ivws_19 2010-06-28
  • 打赏
  • 举报
回复
select *from table where not exists(select 1 from table a where a.类别=table.类别 and a.销售量>table.销售量)
永生天地 2010-06-28
  • 打赏
  • 举报
回复
select  * from tb t
where 销售量=(top max(销售量) from tb where 类别= t.类别)
加载更多回复(1)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧