Chinaunix

标题: MySQL 列别名 无法操作,请问如何解决。 [打印本页]

作者: panxinming90    时间: 2011-01-05 09:14
标题: MySQL 列别名 无法操作,请问如何解决。
MySQL 想是实现求总和,遇到一个问题,如下:
  1. mysql> select * from test;
  2. +----+------+-------+------+
  3. | sn | name | price | num  |
  4. +----+------+-------+------+
  5. |  1 | a    |     2 |    3 |
  6. |  2 | b    |     4 |    5 |
  7. +----+------+-------+------+
  8. 2 rows in set (0.00 sec)

  9. mysql> select *, price * num as count, sum(price * num) as sum from test.test;
  10. +----+------+-------+------+-------+------+
  11. | sn | name | price | num  | count | sum  |
  12. +----+------+-------+------+-------+------+
  13. |  1 | a    |     2 |    3 |     6 |   26 |
  14. +----+------+-------+------+-------+------+
  15. 1 row in set (0.00 sec)

  16. mysql> select *, price * num as count, sum(count) as sum from test.test;
  17. ERROR 1054 (42S22): Unknown column 'count' in 'field list'
  18. mysql>
复制代码
select *, price * num as count, sum(price * num) as sum from test.test; 可以实现,

是否 有直接通过别名完成的方法。
作者: hq8318    时间: 2011-01-05 10:37
select *, price * num as count, sum(price * num) as sum from test.test;
不可以吧,需要group by 子句。
作者: hq8318    时间: 2011-01-05 11:12
select *,@temp:= price * num as count, sum(@temp) as sum from test.test;
后面应该要group by 子句的,你真的不用吗?好奇怪。
作者: zang232    时间: 2011-01-05 14:12
本帖最后由 zang232 于 2011-01-05 14:14 编辑

别名count是mysql的关键字,同学,当然不让用了,换个名字吧,如果你的确想用这个名字,加个反引号就成了;
as `count` 像这样。。

不过跟你的帖子没关系,sorry.理解错了,当我没说。。。
作者: hq8318    时间: 2011-01-05 15:57
别名count是mysql的关键字,同学,当然不让用了,换个名字吧,如果你的确想用这个名字,加个反引号就成了; ...
zang232 发表于 2011-01-05 14:12



   甭不好意思,你说的也是原因之一,且易被人忽略。
作者: panxinming90    时间: 2011-01-05 22:57
  1. mysql> select *, max(testnm), min(testnm), avg(testnm), count(testnm), sum(testnm), sum(testnm) / count(testnm) as testnm from test.test;
  2. +----+--------+-------------+-------------+-------------+---------------+-------------+--------+
  3. | SN | testnm | max(testnm) | min(testnm) | avg(testnm) | count(testnm) | sum(testnm) | testnm |
  4. +----+--------+-------------+-------------+-------------+---------------+-------------+--------+
  5. |  1 |      1 |         119 |        -118 |      3.8750 |             8 |          31 | 3.8750 |
  6. +----+--------+-------------+-------------+-------------+---------------+-------------+--------+
  7. 1 row in set (0.00 sec)

  8. mysql>
复制代码
测试了下,可以重名,这样的话,应该无法计算了把,不然怎么区分呢。
作者: hq8318    时间: 2011-01-06 06:21
可以重名?什么意思,testnm 是一列名,并不是别名。“应该无法计算了把,不然怎么区分呢。”这句话,是说什么无法计算??
作者: hq8318    时间: 2011-01-06 07:07
不知道你的MYSQL是什么版本,我的类似“select *, max(testnm) from test”就报错(要加group),“select max(testnm) from test”则可。还是你的MYSQL作了什么设置,就不会报错。
作者: panxinming90    时间: 2011-01-12 17:53
解决了,使用表别名 + 列别名,如下:
  1. mysql> select * from test;
  2. +----+------+-------+-----+
  3. | sn | name | price | num |
  4. +----+------+-------+-----+
  5. |  1 | a    |     2 |   3 |
  6. |  2 | b    |     4 |   5 |
  7. +----+------+-------+-----+
  8. 2 rows in set (0.01 sec)

  9. mysql> select sum(t.count) as sum from (select *, price * num as count from test) as t;
  10. +------+
  11. | sum  |
  12. +------+
  13. |   26 |
  14. +------+
  15. 1 row in set (0.00 sec)

  16. mysql>
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2