group by 语句用法详解

将 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

时间: 2024-08-04 10:14:16

group by 语句用法详解的相关文章

C语言for语句用法详解_C 语言

首先,这里所提到的类C语言指的是如C.C++.C#和Java等语法和C语言一样或类似的程序设计语言.这些语言中,for语句的语法和执行流程都是一样的.本文将就这一语句的用法进行一个较为深入的讨论. for语句: 复制代码 代码如下: for (表达式1;表达式2;表达式3) {   循环语句 } 表达式1 给循环变量赋初值 表达式2 为循环条件 表达式3 用来修改循环变量的值,称为循环步长. for语句的执行流程: 例:编程计算:1+2+3+...+99+100的结果. 这是累加问题,累加问题的

php中switch语句用法详解_php技巧

本文介绍php中的switch语句的用法,它跟其他语句中的switch用法差不多的,但注意有有一个break语句. PHP中switch语句的标准语法: switch (expression) { case label1: code to be executed if expression = label1; break; case label2: code to be executed if expression = label2; break; default: code to be exe

flash as switch语句用法详解

当一个 case 落空时,它没有 break 语句,但在 break 语句的位置会有一个注释,您在下例中 case A 的后面会看到这样一个注释.在编写 switch 语句时,请使用以下格式:  代码如下 复制代码 switch (condition) { case A :   // 语句   // 落空 case B :   // 语句   break; case Z :   // 语句   break; default :   // 语句   break; } switch语句中defaul

oracle order by语句用法详解

在执行查询操作时,默认情况下会按照行数据插入的先后顺序来显示行数据,但在实际应用中经常需要对数据进行排序,以显示更直观的数据,数据排序用的就是ORDER BY子句.语法如下: SELECT <*,column [alias],...> FROM table [WHERE condition[s]] [ORDER BY] expr [ASC|DESC]; 1.升序排序 默认情况下,当使用ORDER BY执行排序操作时,数据以升序方式排序,也可以在排序列后指定ASC关键字.注意:当执行升序排序时,

Sqlite3中replace语句用法详解

  由于自己的孤陋寡闻, 也由于之前的项目中, 很少参与过数据库模块的开发, 以至于前几天才知道Sqlite数据库也支持replace语句. 本文主要讲解在Sqlite中replace语句的行为,也算是学习笔记.此外, replace语句和update语句有相似的地方, 但是也有很多不同之处. 本文还要对比一下Sqlite中的 replace语句和update语句 . 在本例中使用如下数据库表: (图 1) 该表的表名为student, 存储学生信息. 所有字段的数据类型都是TEXT . 其中i

mysql SELECT FOR UPDATE 语句用法详解

以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式: SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE 这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待其它事务数据被提交(Commit)后才会执行.而主要的不同在于LOCK IN SHARE MODE 在有一方事务要Update

mysql中TRUNCATE TABLE 语句用法详解

TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. 语法    TRUNCATE TABLE name; 参数    name(是要截断的表的名称或要删除其全部行的表的名称) TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE

Php入门教程之PHP If和else语句用法详解

条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作.您可以在代码中使用条件语句来完成此任务. if-else 语句 在条件成立时执行一块代码,条件不成立时执行另一块代码 elseif 语句 与 if-else 配合使用,在若干条件之一成立时执行一个代码块 If-Else 语句 语法 if (condition)   code to be executed if condition is true; else   code to be executed if condition is

MySQL中Update与Insert语句用法详解

MySQL 更新数据 Update 语句 update 语句的定义: UPDATE语法可以用新值更新原有表行中的各列.让我们先来看一下update语句标准的定义,放在[]内的都是可以省略的:  代码如下 复制代码 UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] s