posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

部分高级查询 sql 拼写笔记 (mysql)

Posted on 2008-08-09 22:00 G_G 阅读(3459) 评论(9)  编辑  收藏 所属分类: Database
参考:http://www.programbbs.com/bbs/view25-12320-1.htm
但上面的 一些sql语句 ,有查询时间问题,在此我已于改正了并希望和大家分享。

---------自我感觉 第四题 很不错!-------------


----------------------------------------------------------------------
第一题(只要重复的都要 输出)
----------------------------------------------------------------------
create table c (id int );
insert into c values (1),(2),(3),(4),(3),(5),(6),(1);
结果:
    
select id from c group by id having count(id)>1 ;
附加(查询重复最多的倒排)
select bid,count(bid) as cu from tb group by bid having count(bid)>1  order by cu  desc





----------------------------------------------------------------------
第二题(报表查询横向输出)
查询后的结果:
Create table d(id int,name varchar(50));
insert into d values(1,'gly');
insert into d values(2,'ptgly');
insert into d values(3,'ybgly');
insert into d values(4,'ptgly');
insert into d values(5,'ybgly');
+---+-----+------+
|gly|ptgly|ybgly |     
|---+-----+------+-
|1  |2    |2     |
+---+-----+------+
-----------------------------------------------------------------------
select 
    
sum(case when name='gly' then 1 else 0 end ) as gly  ,
    
sum(case when name='ptgly' then 1 else 0 end ) as ptgly  ,
    
sum(case when name='ybgly' then 1 else 0 end ) as ybgly  
from d ;



第三题
可以根据上面 2,4 可以得出 。
下面我们详细说下 4题。


-----------------------------------------------------------------------
第四题(复杂组合查询!)
create table table_a (No int, No2 int,num double,itime date);
insert into table_a values
     (1234,567890,33.5,'2004-12-21'),
     (1234,598701,44.8,'2004-11-21'),
     (1234,598701,45.2,'2004-10-01'),
     (1234,567890,66.5,'2004-9-21'),
     (3456,789065,22.5,'2004-10-01'),
     (3456,789065,77.5,'2004-10-27'),
     (3456,678901,48.5,'2004-12-21');
按月统计销售表中货物的销售量数
查询结果如下:
  No, No2 ,   九月,  十月,十一月,十二月
1234,567890, 66.5 ,  0 ,  0  ,  33.5
1234,598701,  0   , 45.2, 44.8, 0
3456,789065, 0  ,  100,  0  ,  0
3456,678901, 0 ,    0,    0  ,  48.5
-----------------------------------------------------------------------
//当然也可以 使用mysql 时间函数 在软件编辑时 你可以输入 String[] 并根据数据动态拼写 sql( case部分!! )
//这个 例子很好 哦!报表可以一句sql 得出!

select NO,NO2,
    
sum(case  when itime like '2004-%9%' then num else 0 endas 9M,
    
sum(case  when itime like '2004-10%' then num else 0 endas 10M,
    
sum(case  when itime like '2004-11%' then num else 0 endas 11M,
    
sum(case  when itime like '2004-12%' then num else 0 endas 12M
from table_a group by no,no2 order by no,no2 ;


--------------------------------------------------------------
第五题
代码,名称
1     a
2     b
11    c
(代码11表示为1的下级)
我要通过一条句子,得出如下结果:

代码,名称,有无下级
1     a     有
2     b     无
11    c     无


Create table TabTest(t_Code varchar(10),t_Name varchar(10));
insert into TabTest values('1','a');
insert into TabTest values('2','b');
insert into TabTest values('11','c');
--------------------------------------------------------------
select tt1.t_Code,tt1.t_name,( 
     
case 
             
when exists (select 1 from tabtest tt2 
                                       
where tt2.t_code like CONCAT(tt1.t_code,'%'and 
                                        tt2.t_code 
<> tt1.t_code )  then 'you' 
             
else 'wu'
      
end ) as you_wu
from tabtest  tt1 ;









评论

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-11 09:08 by 游客
误人子弟!

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-11 09:50 by Skynet
@游客
详细说明下吗?当报表查询时你 用大量硬代码,去统计数据?
这种sql还是会的好

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-11 14:55 by 游客
这种sql也叫高级查询语句???并且都是死sql代码,不是误人子弟是什么?

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-12 09:08 by Skynet
@游客
看来这位仁兄 意见很深啊 !
能详细点吗 你上面还只是单纯的评价,有什么好的方法,或高见说出来与大家分享!
我这就抛砖引玉了 !
顺便我这也好好学习学习

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-12 09:12 by Skynet
死sql代码 ?这点 我并不赞同 !
代码中动态的 生成拼接 sql ,还是第一次听说 死sql代码?难想
@游客 兄会 面向对象数据库动态查询? 这就期待中

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-14 16:47 by sniperking
恩确实在统计查询中SQL的技巧很重要呀!省很多事呀

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-08-26 11:55 by 冰河快狼
不要乱骂人,我见过很多动不动骂人的人能力其实并不怎么样,我觉得楼主的总结还是可以的

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2008-12-22 15:21 by 又一个游客
不会写行转列就多问啊,写的这么垃圾的代码,晕。

# re: 部分高级查询 sql 拼写笔记 (mysql)  回复  更多评论   

2012-05-07 16:10 by 老衲用飘柔
说实话,写的的的确是差了那么一点点

只有注册用户登录后才能发表评论。


网站导航: