现在有一个sql
select 
col_a,
col_b,
col_c,
(select count(*) from tab_b where no>10),
(select max(id)  from tab_b where no>10),
(select min(id)  from tab_b where no>10)
from tab_a where col_a='某值'
第4、5、6个字段都取自同一张表,请问这个sql能够简化一下

解决方案 »

  1.   

    with my_tab_b as (
                  select count(*) totalnum, max(id) maxid, min(id) minid 
                    from tab_b where no>10
                     ) 
      select col_a, col_b, col_c,totalnum,maxid,minid
        from tab_a,my_tab_b where col_a='某值' 
      

  2.   

    不能写成
    select 
    col_a, 
    col_b, 
    col_c, 
    (select count(*),max(id),min(id) from tab_b where no>10)
    from tab_a where col_a='某值' 
    类似的语句吗(上面这个运行不了)
      

  3.   

    select col_a, col_b, col_c  from tab_a where col_a='某值' union 
    select count(*),max(id),min(id) from tab_b where no>10
      

  4.   

    SELECT a.col_a, a.col_b, a.col_c, b.count_num, b.max_id, b.min_id
      FROM tab_a a, (SELECT COUNT (*) count_num, MAX (ID) max_id, MIN (ID) min_id
                       FROM tab_b
                      WHERE NO > 10) b
     WHERE a.col_a = '某值';
      

  5.   

    select b.col_a, b.col_b, b.col_c, a.cnt,a.maxid,a.minid from
    (select count(id) cnt, max(id) maxid, min(id) minid from tab_b where no>10) a, tab_b b;
    不过,你这样做有实际意义吗?或者说 col_a,col_b,col_c是冗余字段吧