group by 语句用法详解

www.111cn.net 更新:2011-04-24 编辑:kp12345 来源:转载

将 where 子句与 group by 子句一起使用

分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 where 子句。必须在group by 子句之前指定 where 子句

 

$result = mysql教程_query("select groups教程,name,goods from table group by groups,name order by name");
$arr = array();
$i = 0;
while($row = mysql_fetch_array($result)){
$arr[] = $row;
}

$m = $i - 1;
foreach($arr as $k=>$v){
if($v[$i]['groups'] <> $v[$m]['groups']){
echo '分割符号';
}
echo $v['name'],$v['goods'];
}

看个应用实例

group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。

select子句中的列名必须为分组列或列函数。列函数对于group by子句定义的每个组各返回一个结果。

某个员工信息表结构和数据如下:

 

id  name  dept  salary  edlevel  hiredate 
      1 张三 开发部 2000 3 2009-10-11
      2 李四 开发部 2500 3 2009-10-01
      3 王五 设计部 2600 5 2010-10-02
      4 王六 设计部 2300 4 2010-10-03
      5 马七 设计部 2100 4 2010-10-06
      6 赵八 销售部 3000 5 2010-10-05
      7 钱九 销售部 3100 7 2010-10-07
      8 孙十 销售部 3500 7 2010-10-06

例如,我想列出每个部门最高薪水的结果,sql语句如下:

select dept, max(salary) as maximum
from staff
group by dept

查询结果如下:
      dept  maximum 
      开发部 2500
      设计部 2600
      销售部 3500

我们现在回到函数上。记得我们用 sum 这个指令来算出所有的 sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。这个语法为: 

  

select "栏位1", sum("栏位2") from "表格名" group by "栏位1"

  select store_name, sum(sales) from store_information group by store_name

  在我们的示范上, 

  store_information 表格

  store_name sales date 

  los angeles $1500 jan-05-1999 

  san diego $250 jan-07-1999 

  los angeles $300 jan-08-1999 

  boston $700 jan-08-1999 

  我们就打入
select store_name, sum(sales) from store_information group by store_name 

  结果: 

  store_name sum(sales)

  los angeles $1800

  san diego $250

  boston $700

相关内容