几个sql语句

select extract(YEAR FROM t.dateordered) AS 年度,extract(MONTH FROM t.dateordered) as 月份,
p.name as 供应商名字,sum(t.linenetamt) 合计
from c_orderline2 t
left join c_bpartner p on p.c_bpartner_id=t.c_bpartner_id
group by extract(YEAR FROM t.dateordered),extract(MONTH FROM t.dateordered),p.name
having extract(YEAR FROM t.dateordered)=2009 and extract(MONTH FROM t.dateordered) in (1,2,3)
order by p.name;

注意:

1.如果选择列表中包含有列、表达式或者分组函数,那么这些列或者表达式必须出现在Group By子句中,否则数据库会提示相关的错误信息。分组函数不用出现在Group By子句中。Extract函数从一个日期数据中抽取具体的年、月信息。这个是Oracle数据库中一个很有用的日期函数。要是没有这个函数的话,笔者还需要通过字符串等处理函数来截取年月等信息。由于Extract是一个带函数的表达式,为此其必须出现在Group By子句中。选择列表中如果包含有列、表达式时,这个列、表达式必须包含在Group By子句中。另外,如果采用了表达式的话,则数据库管理员即使在选择列表中采用了别名,但是在Group By子句中仍然必须采用表达式的完整表达方式,而不能够采用别名。

2. 如果在一个查询语句中,同时含有Group By(分组语句)、Having(分组语句下的条件函数)、Order By(排序语句)三个共存的话,则需要注意他们有一定的书写顺序。如果想把某个字段当作第一顺序排序的话,则只需要把这个字段放置在分组语句中的第一个参数即可。order by 要慎用

3.Having子句必须跟在Group By语句后面使用。其中Group By子句用户对查询结果进行分组统计,而Having子句则用于限制分组显示结果,即根据用户的要求来部分显示所需要的内容。他们是互相配合,分工合作。

4.多列分组时指在Group By子句中使用两个或者两个以上的列生成分组统计结果。当进行多列分组时,汇集于多个列的不同值产生数据统计结果。

参考:http://luying84.javaeye.com/blog/414994

 

select count(*) as cnt, count(distinct user_id) as cnt2, to_char(trunc(entry_date), 'yyyy-mm-dd') as dd
from tbl_comment t
where book_id in (select book_id from tbl_book_campaign) and is_del=0
GROUP BY trunc(entry_date)
having trunc(sysdate )-trunc(entry_date)<=30
order by trunc(entry_date) desc

统计评论个数以及发表评论的不同作者的个数

分组统计的功能,可以求和比如sum

其中distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。

select distinct name, id from table将会对id,name组合查询,也就是2个都不相同。

要用,select *, count(distinct name) from table group by name,去掉了重复的name,并同时显示其中的一条的id。

 

参考:http://hi.baidu.com/chen_0613/blog/item/a6f8d80f0a148bc17acbe1aa.html

http://zhylea.javaeye.com/blog/552656

http://www.360doc.com/content/10/1012/13/3103730_60341997.shtml

 


posted @ 2011-01-25 13:35  hayley  阅读(167)  评论(0编辑  收藏  举报