|
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 BY 或 ORDER BY 子句中使用表达式。你可以使用表达式的别名来应付这个限制: mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
-> GROUP BY id,val ORDER BY val;
好了就是这些了,以后大家可以继续学习与交流!
|