CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

这个SQL搞得我头都昏了,兄弟们帮帮我。(100分)

楼主renliquan(狗狗)2005-06-01 09:46:13 在 MS-SQL Server / 基础类 提问

我有两个表:  
   
  表MovHits:Hid字段   HitDate字段  
   
  表Mov:MovID字段   MovName字段   MovTitle字段   PicURL字段   MovPlayTime字段   MovContent字段  
   
  MovHits表用来记录电影的点击量,每点击一次电影就向MovHits表里写一个HID(对应电影MovID)和点击时间。  
  Mov表是电影表。  
   
  我现在想得到:  
  1、一个星期内电影点击排行榜(按点击量排序)?  
  2、一个月内电影电击排行榜(按点击量排序)?  
  3、一个星期内点击数占总点击数的百分比?  
  4、Mov.MovID为100的当天的点击数?  
  5、Mov.MovID为100的所有点击数占总点击数的百分比?  
   
  (结果除了要显示点击数还要要显示Mov里的所有字段) 问题点数:100、回复次数:9Top

1 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-01 10:01:33 得分 40

1、  
  select    
          a.MovID,  
          a.MovName,  
          a.MovTitle,  
          a.PicURL,  
          a.MovPlayTime,  
          a.MovContent,  
          isnull(count(b.HitDate),0)  
  from  
          Mov   a  
  left   join  
          MovHits   b  
  on  
          a.MovID   =   b.Hid  
  where  
          datediff(wk,HitDate,getdate())   =   0  
  group   by  
          a.MovID,a.MovName,a.MovTitle,a.PicURL,a.MovPlayTime,a.MovContent  
  order   by  
          isnull(count(b.HitDate),0)   desc  
   
   
  2、  
  select    
          a.MovID,  
          a.MovName,  
          a.MovTitle,  
          a.PicURL,  
          a.MovPlayTime,  
          a.MovContent,  
          isnull(count(b.HitDate),0)  
  from  
          Mov   a  
  left   join  
          MovHits   b  
  on  
          a.MovID   =   b.Hid  
  where  
          datediff(mm,HitDate,getdate())   =   0  
  group   by  
          a.MovID,a.MovName,a.MovTitle,a.PicURL,a.MovPlayTime,a.MovContent  
  order   by    
          isnull(count(b.HitDate),0)   descTop

2 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-01 10:06:47 得分 0

3、  
  select    
          a.MovID,  
          a.MovName,  
          a.MovTitle,  
          a.PicURL,  
          a.MovPlayTime,  
          a.MovContent,  
          percent   =   cast(isnull(count(b.HitDate),0)*100.0/(select   isnull(count(*),1.0)   from   MovHits   where   Hid   =   a.MovID)   as   numeric(5,2))  
  from  
          Mov   a  
  left   join  
          MovHits   b  
  on  
          a.MovID   =   b.Hid  
  where  
          datediff(wk,b.HitDate,getdate())   =   0  
  group   by  
          a.MovID,a.MovName,a.MovTitle,a.PicURL,a.MovPlayTime,a.MovContent  
  order   by  
          isnull(count(b.HitDate),0)   desc  
   
   
  4、  
  select    
          a.MovID,  
          a.MovName,  
          a.MovTitle,  
          a.PicURL,  
          a.MovPlayTime,  
          a.MovContent,  
          isnull(count(b.HitDate),0)  
  from  
          Mov   a  
  left   join  
          MovHits   b  
  on  
          a.MovID   =   b.Hid  
  where  
          datediff(dd,b.HitDate,getdate())   =   0  
          and  
          a.MovID   =   100  
  group   by  
          a.MovID,a.MovName,a.MovTitle,a.PicURL,a.MovPlayTime,a.MovContentTop

3 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-01 10:15:25 得分 0

5、  
  select    
          a.MovID,  
          a.MovName,  
          a.MovTitle,  
          a.PicURL,  
          a.MovPlayTime,  
          a.MovContent,  
          percent   =   cast(isnull(count(b.HitDate),0)*100.0/(select   isnull(count(*),1.0)   from   MovHits)   as   numeric(5,2))  
  from  
          Mov   a  
  left   join  
          MovHits   b  
  on  
          a.MovID   =   b.Hid  
  where  
          a.MovID   =   100  
  group   by  
          a.MovID,a.MovName,a.MovTitle,a.PicURL,a.MovPlayTime,a.MovContentTop

4 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-01 10:22:14 得分 5

应该能解决了吧。Top

5 楼xluzhong(Ralph)回复于 2005-06-01 11:33:41 得分 55

1.  
  select   a.*,b.hittimes  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits   where   datediff(wk,hitdate,getdate())=0    
  group   by   hid  
  )b  
  on   a.movid=b.hid  
  order   by   b.hittimes   desc  
  2.  
  select   a.*,b.hittimes  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits   where   datediff(m,hitdate,getdate())=0    
  group   by   hid  
  )b  
  on   a.movid=b.hid  
  order   by   b.hittimes   descTop

6 楼xluzhong(Ralph)回复于 2005-06-01 11:40:31 得分 0

3.  
  select   a.*,b.hittimes,c.sumhittimes,cast((b.hittimes*1.0/c.sumhittimes)*100   as   nvarchar(10))+'%'  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits   where   datediff(wk,hitdate,getdate())=0    
  group   by   hid  
  )b  
  on   a.movid=b.hid  
  inner   join   (  
  select   hid,count(*)   as   sumhittimes    
  from   movhits  
  group   by   hid  
  )c  
  on   a.movid=c.hidTop

7 楼xluzhong(Ralph)回复于 2005-06-01 11:41:53 得分 0

 
  4.  
  select   a.*,b.hittimes  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits   where   datediff(d,hitdate,getdate())=0    
  group   by   hid  
  )b  
  on   a.movid=b.hid  
  where   movid='100'  
   
  5.  
  select   a.*,b.hittimes,c.sumhittimes,cast((b.hittimes*1.0/c.sumhittimes)*100   as   nvarchar(10))+'%'  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits   where   datediff(wk,hitdate,getdate())=0    
  group   by   hid  
  )b  
  on   a.movid=b.hid  
  inner   join   (  
  select   hid,count(*)   as   sumhittimes    
  from   movhits  
  group   by   hid  
  )c  
  on   a.movid=c.hid  
  where   movid='100'Top

8 楼xluzhong(Ralph)回复于 2005-06-01 11:43:56 得分 0

5.---看错了,改一下  
  select   a.*,b.hittimes,c.sumhittimes=(select   count(*)   from   movhits),cast((b.hittimes*1.0/c.sumhittimes)*100   as   nvarchar(10))+'%'  
  from   mov   a  
  inner   join   (  
  select   hid,count(*)   as   hittimes    
  from   movhits    
  group   by   hid  
  )b  
  on   a.movid=c.hid  
  where   movid='100'Top

9 楼renliquan(狗狗)回复于 2005-06-01 14:55:33 得分 0

xluzhong(Ralph),第五个和第三个不对,报错:  
  第三个报错:  
  服务器:   消息   8115,级别   16,状态   2,行   1  
  将   expression   转换为数据类型   nvarchar   时发生算术溢出错误。  
  第五个报错:  
  服务器:   消息   170,级别   15,状态   1,行   1  
  第   1   行:   '='   附近有语法错误。  
  服务器:   消息   170,级别   15,状态   1,行   1  
  第   1   行:   ','   附近有语法错误。  
  服务器:   消息   170,级别   15,状态   1,行   7  
  第   7   行:   'b'   附近有语法错误。  
   
   
  libin_ftsafe(子陌红尘)   ,你的语句要报这个错:  
  服务器:   消息   206,级别   16,状态   2,行   1  
  操作数类型冲突:   int   与   void   type   不兼容  
  服务器:   消息   306,级别   16,状态   1,行   1  
  不能比较或排序   text、ntext   和   image   数据类型,除非使用   IS   NULL   或   LIKE   运算符。  
   
  不过已经解决了1、2、4、这三个问题了。  
  Top

相关问题

  • sql语名执行时出错,nt把我搞昏了头了。
  • 被update搞昏了头
  • 抢分抢得头都昏了
  • 有没有兄弟装过 SQL 2000
  • 熟悉sql的兄弟看过来
  • 不想再做数据库开发了,我都要头昏了.
  • 兄弟们呀,帮帮我吧!(原代码,SQL SERVER)
  • 求一个Sql的写法(可加分),兄弟们帮帮忙
  • 各位兄弟,SQL server 7.0支持函数功能吗?
  • SQL 语句问题,100分,(急!!望兄弟们帮忙呀)

关键词

  • 字段
  • 服务器
  • 语法
  • 消息
  • movid
  • hitdate
  • movhits
  • movtitle
  • movname
  • movplaytime

得分解答快速导航

  • 帖主:renliquan
  • libin_ftsafe
  • duanduan1122
  • xluzhong

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo