首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 这个select 语句哪儿错了? [已结贴,结贴人:yanjingrong]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:40:59 楼主
    就这句:

    select art_no,max(sum(SALE_AMOUNT)) from tb_fin_art_stock;
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:41:411楼 得分:0
    你用了分组函数,必须加group by 条件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:45:562楼 得分:0
    是这句:

    select art_no,max(sum(SALE_AMOUNT)) from tb_fin_art_stock
    where  RUN_DATE between '01-mar-08' and '20-may-08';


    上面那句作废!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:46:253楼 得分:0
    group by art_no,SALE_AMOUNT
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:46:344楼 得分:0
    加了 group  by  也不行的 我都试了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:49:505楼 得分:0
    引用 1 楼 lpc19598188 的回复:
    你用了分组函数,必须加group by 条件

    这个应该叫聚合函数吧,反正group by 是必须的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:50:526楼 得分:0
    引用 4 楼 yanjingrong 的回复:
    加了 group  by  也不行的 我都试了

    什么错,信息说一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:51:027楼 得分:0
    group by art_no就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:52:358楼 得分:5
    不过你max(sum())这有意义嘛?sum出来就是一个结果,maX还是这个结果
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:53:039楼 得分:0
    RUN_DATE  data
    类型不一致,

    select art_no,max(sum(SALE_AMOUNT)) from tb_fin_art_stock
    where  RUN_DATE between to_date('01-mar-08','dd-mon-yy') and to_date('20-may-08','dd-mon-yy')
    group by art_no;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:55:1610楼 得分:6

    select a.art_no,max(sum1)  from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock  ) a
    group by a.art_no
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:55:1911楼 得分:0
    楼主也不说什么错误,楼上说的是一种可能性
    如果是这样的话,楼主是照搬sql server的写法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 10:57:0012楼 得分:0
    引用 10 楼 Robin_Ares 的回复:

    select a.art_no,max(sum1)  from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock  ) a
    group by a.art_no

    里面层少了个group by 吧
    不过里面层有了的话,外面层max就没意义,里面层已经是一个结果了,外面再MAX还是这个结果
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 11:37:0213楼 得分:0
    我的目的就是想知道  RUN_DATE between '01-mar-08' and '20-may-08' 这个时间段里面,max(sum(SALE_AMOUNT) )对应的 art_no 值


    我的语句 :
    select art_no,sum(SALE_AMOUNT) from tb_fin_art_stock  where  RUN_DATE between '01-mar-08' and '20-may-08' and rownum=1 group by art_no order by SALE_AMOUNT;


    说明,我想让sum(SALE_AMOUNT)从大到小排序之所以rownum=1,是因为第一行的sum(SALE_AMOUNT)就是最大值,我就想知道这个sum(SALE_AMOUNT)的最大值,和对应的art_no的值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gaohaha
    • 等级:
    发表于:2008-05-21 11:40:0814楼 得分:5
    用LZ的语句模拟了一下,提示是不是单组分组函数
    是max的错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 11:44:0215楼 得分:0
    引用 10 楼 Robin_Ares 的回复:

    select a.art_no,max(sum1)  from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock  ) a
    group by a.art_no


    这个和我的思路一样,但是上面的程序有错误,怎么改下?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 11:45:5516楼 得分:0
    错误是这样的:


    SQL> select a.art_no,max(sum1) from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08'  ) a
    group by a.art_no; 

    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08'  ) a
          *
    ERROR at line 2:
    ORA-00937: not a single-group group function
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gaohaha
    • 等级:
    发表于:2008-05-21 11:47:4017楼 得分:0
    引用 10 楼 Robin_Ares 的回复:

    select a.art_no,max(sum1)  from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock  ) a
    group by a.art_no



    子查询就是错误的,少了group by
    而且外面的查询是也是没用的,内部查询的结果就是外部的结果了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 11:53:0118楼 得分:0
    引用 17 楼 gaohaha 的回复:
    引用 10 楼 Robin_Ares 的回复:

    select a.art_no,max(sum1)  from ( 
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock  ) a 
    group by a.art_no 



    子查询就是错误的,少了group by 
    而且外面的查询是也是没用的,内部查询的结果就是外部的结果了



    怎么改一下呢?求教了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gaohaha
    • 等级:
    发表于:2008-05-21 11:55:2619楼 得分:0
    你这句话是想干什么呢?
    因为有了sum所以就已经是 每行art_no 已经是一个汇总了

    你的max是想实现什么目标呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 13:01:3920楼 得分:4
    楼主是想知道先分组求和,然后再找哪个MAX
    这样就行了
    select  a.*
    from
    (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08'
    order by 2 desc

    ) a
    where rownum=1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 15:48:4921楼 得分:0
    select  a.art_no
    from
    (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08'
    group by  art_no
    order by sum1 desc

    ) a
    where rownum=1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 16:11:2022楼 得分:0
    引用 19 楼 gaohaha 的回复:
    你这句话是想干什么呢?
    因为有了sum所以就已经是 每行art_no 已经是一个汇总了

    你的max是想实现什么目标呢?

    这个厉害,顶这个!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 16:12:5623楼 得分:0
    引用 20 楼 hebo2005 的回复:
    楼主是想知道先分组求和,然后再找哪个MAX
    这样就行了
    select  a.*
    from
    (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08' 
    order by 2 desc

    ) a
    where rownum=1

    这个厉害,顶这个!

    汉~~~!上面顶错了!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 16:29:2424楼 得分:0
    select  a.*
    from
    (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between to_date('20080501') and to_date('20080520') 
    group by art_no
    order by sum1 desc
    ) a
    where rownum=1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 16:37:3825楼 得分:0
      select max(sum(SALE_AMOUNT) ¦ ¦ '_' ¦ ¦ art_no)
      from tb_fin_art_stock
      where RUN_DATE between to_date('20080501') and to_date('20080520') 
      group by art_no
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 19:10:1826楼 得分:0
    引用 25 楼 xudaqing2008 的回复:
      select max(sum(SALE_AMOUNT)  ¦ ¦ '_'  ¦ ¦ art_no)
      from tb_fin_art_stock
      where RUN_DATE between to_date('20080501') and to_date('20080520') 
      group by art_no
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 09:15:0327楼 得分:0
    select a.art_no,max(a.sum1) from (
    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between '01-mar-08' and '20-may-08'  group by art_no) a
    group by a.art_no; 
    这样应该没问题了...子查询完成了将tb_fin_art_stock 表中的数据按art_no分组后求和的任务..在外层的查询将和最大的srt_no和值显示
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 09:20:1928楼 得分:0
    引用 8 楼 hebo2005 的回复:
    不过你max(sum())这有意义嘛?sum出来就是一个结果,maX还是这个结果

    同意
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 12:46:4029楼 得分:0
    引用 8 楼 hebo2005 的回复:
    不过你max(sum())这有意义嘛?sum出来就是一个结果,maX还是这个结果


    说的没错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 13:00:3330楼 得分:0
    按照楼主的意思,这样写肯定是对的
    select  a.* 
    from 

    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between to_date('20080501','yyyy-mm-dd') and to_date('20080520','yyyy-mm-dd') 
    group by art_no
    order by sum1 desc 
    ) a 
    where rownum=1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 14:07:2531楼 得分:0
    只给你sum(SALE_AMOUNT) 后面加个AS **就可以了.这是问题的关键根源!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 14:38:5232楼 得分:0
    引用 30 楼 chensi05 的回复:
    按照楼主的意思,这样写肯定是对的
    select  a.* 
    from 

    select art_no,sum(SALE_AMOUNT) as sum1  from tb_fin_art_stock where RUN_DATE between to_date('20080501','yyyy-mm-dd') and to_date('20080520','yyyy-mm-dd')   
    group by art_no 
    order by sum1 desc 
    ) a 
    where rownum=1


    30楼的朋友这段代码有错误,提示:ORA-00907: missing right parenthesis
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 14:53:3333楼 得分:0
    引用 31 楼 jian_hao 的回复:
    只给你sum(SALE_AMOUNT) 后面加个AS **就可以了.这是问题的关键根源!


    这个朋友的意思我没明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wdbjsh
    • 等级:
    发表于:2008-05-22 14:59:5634楼 得分:0
    select art_no,max(sums) from (select art_no,sum(SALE_AMOUNT) as sums from tb_fin_art_stock 
    where  RUN_DATE between to_date('01-mar-08','dd-mon-yy') and to_date('20-may-08','dd-mon-yy')
    group by art_no) as tbview
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-22 15:27:1135楼 得分:0
    呵呵,这么多答案了,我来看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天