| 论坛注册| 加入收藏 | 设为首页| RSS
您当前的位置:首页 > Linux频道 > Linux开发区 > 数据库开发

MySQL语言参考(3) :SELECT和WHERE子句的函数

时间:2005-12-09 08:02:09  来源:  作者:笑醉了
mysql> CREATE TABLE `ta` (
    ->   `id` smallint(5) unsigned NOT NULL default '0',
    ->   KEY `id` (`id`)
    -> ) TYPE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO `ta` VALUES("1"),("2"),("3"),("4");
Query OK, 8 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT BIT_OR(id) from ta;
+------------+
| BIT_OR(id) |
+------------+
|          7 |
+------------+
1 row in set (0.00 sec)

#     ..0001
#     ..0010
#     ..0011
#     ..0100
#  OR ..0000
#  ---------
#     ..0111

mysql> SELECT BIT_AND(id) from ta;
+-------------+
| BIT_AND(id) |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)

#      ..0001
#      ..0010
#      ..0011
#      ..0100
#  AND ..1111
#  ----------
#      ..0000

* 以上结果在 MySQL 4.1 中测试
示例结束(译者注)

MySQL 扩展了 GROUP BY 的用法。在 SELECT 表达式中,你可以使用或计算没有出现在 GROUP BY 部分中的列。这代表 这个组的任何可能的值。你可以使用它避免在不必要的分类项目上进行排序和分组,这样会得到更好的性能。举例来说,在下面的例子中,你不必要以 customer.name 进行分组:

mysql> SELECT order.custid,customer.name,MAX(payments)
    ->        FROM order,customer
    ->        WHERE order.custid = customer.custid
    ->        GROUP BY order.custid;

在 ANSI SQL 中,必须将customer.name 添加到 GROUP BY 子句。而在 MySQL 中,如果没有以 ANSI 模式运行,该名是多余的。

如果你在 GROUP BY 部分省略的列在分组中不是唯一的,请不要使用这个特征!否则将得到不可预知的结果。

在某些情况下,可以使用 MIN()MAX() 获得一个特定的列值,即使它不是唯一的。下面的示例取出包含了 sort 列中最小值的记录行中的 column 的值:

SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)

查看章节 3.5.4 拥有某个字段的组间最大值的记录行

注意,如果你所使用的是 MySQL 3.22 (或更早的版本),或者你正试图遵从 ANSI SQL,你不能在 GROUP BYORDER BY 子句中使用表达式。你可以使用表达式的别名来应付这个限制:

mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
    ->        GROUP BY id,val ORDER BY val;

好了就是这些了,以后大家可以继续学习与交流!

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门