一、sql函数:
1、单行函数:
[color=brown]字符函数[/color](upper、lower、concat、substr(s,c1,c2)...);
[color=brown]数值函数[/color](abs(x)、round(x,y)、mod(x,y),sqrt(x)...);
[color=brown]日期函数[/color](months_between(d1,d2)、add_months(d,t)、last_day(d)...);
[color=brown]数据转换函数[/color](to_char(x,['frm'])、to_date()...);
[color=brown]decode函数[/color]:
[color=brown]nvl函数[/color]:
2、分组函数
count:
[list]
[*]count(*)//统计表中所有行的行数。如果表很大不要用。
[*]count(列名)//统计表中指定列为非null值的行数。*建议使用
[*]count(distinct 列名)//统计表中指定列名[color=red]除去重复值[/color]的行数。
[/list]
max(distinct/all 列名)//返回作为参数给出的列中最大值。
min(distinct/all 列名)//返回作为参数给出的列中最小值。
avg(distinct/all 列名)//返回作为参数给出的列中平均值。
sum(distinct/all 列名)//累加值并返回总和。
[color=red]注:分组函数会忽略值为null的记录。[/color]
-----------例子--------
1、sum()方法是用来求num这列的累加和的;
count()方法是求num不为空的总行数(也就是如果num这列有空值(null)不在统计范围之内)。如果想让其统计则用:
[quote]sum:[color=red]累加[/color];count:[color=red]累计[/color]。[/quote]
2、nvl();
3、group by 的作用
t_income表数据如下:
时间(in_date) 收入(money)
2010-06-08 10000
2010-06-09 20000
2010-06-08 30000
2010-06-09 40000
想让其展示如下:
2010-06-08 40000
2010-06-09 60000
sql语句如下:
1、单行函数:
[color=brown]字符函数[/color](upper、lower、concat、substr(s,c1,c2)...);
[color=brown]数值函数[/color](abs(x)、round(x,y)、mod(x,y),sqrt(x)...);
[color=brown]日期函数[/color](months_between(d1,d2)、add_months(d,t)、last_day(d)...);
[color=brown]数据转换函数[/color](to_char(x,['frm'])、to_date()...);
[color=brown]decode函数[/color]:
sql>select job,sal,decode(job,'维修工程师',sal*1.1,
'软件工程师',sal*1.2,sal) 加薪后的工资 from emp;
[color=brown]nvl函数[/color]:
nvl(comm,0)//如果数值comm值为空,则转换为0。
2、分组函数
count:
[list]
[*]count(*)//统计表中所有行的行数。如果表很大不要用。
[*]count(列名)//统计表中指定列为非null值的行数。*建议使用
[*]count(distinct 列名)//统计表中指定列名[color=red]除去重复值[/color]的行数。
[/list]
max(distinct/all 列名)//返回作为参数给出的列中最大值。
min(distinct/all 列名)//返回作为参数给出的列中最小值。
avg(distinct/all 列名)//返回作为参数给出的列中平均值。
sum(distinct/all 列名)//累加值并返回总和。
[color=red]注:分组函数会忽略值为null的记录。[/color]
-----------例子--------
select sum(num),count(num) from table_name;
1、sum()方法是用来求num这列的累加和的;
count()方法是求num不为空的总行数(也就是如果num这列有空值(null)不在统计范围之内)。如果想让其统计则用:
select count(nvl(num,0)) from table_name;//结果为记录的总行数,发现nvl(num,这里什么都行);
select count(nvl(num,null)) from table_name;//结果与count(num)是一样的。
[quote]sum:[color=red]累加[/color];count:[color=red]累计[/color]。[/quote]
2、nvl();
select nvl(sum(num),0), nvl(count(num),0) from table_name;//如果统计出来的结果为null则让其显示0
3、group by 的作用
t_income表数据如下:
时间(in_date) 收入(money)
2010-06-08 10000
2010-06-09 20000
2010-06-08 30000
2010-06-09 40000
想让其展示如下:
2010-06-08 40000
2010-06-09 60000
sql语句如下:
select in_date,sum(money) from t_income group by in_date;
select in_date,sum(money) from t_income group by in_date having in_date='2010-06-08'//只显示时间为2010-06-08的总收入