免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6142 | 回复: 8
打印 上一主题 下一主题

MySQL 列别名 无法操作,请问如何解决。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-05 09:14 |只看该作者 |倒序浏览
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; 可以实现,

是否 有直接通过别名完成的方法。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
2 [报告]
发表于 2011-01-05 10:37 |只看该作者
select *, price * num as count, sum(price * num) as sum from test.test;
不可以吧,需要group by 子句。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
3 [报告]
发表于 2011-01-05 11:12 |只看该作者
select *,@temp:= price * num as count, sum(@temp) as sum from test.test;
后面应该要group by 子句的,你真的不用吗?好奇怪。

论坛徽章:
0
4 [报告]
发表于 2011-01-05 14:12 |只看该作者
本帖最后由 zang232 于 2011-01-05 14:14 编辑

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

不过跟你的帖子没关系,sorry.理解错了,当我没说。。。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
5 [报告]
发表于 2011-01-05 15:57 |只看该作者
别名count是mysql的关键字,同学,当然不让用了,换个名字吧,如果你的确想用这个名字,加个反引号就成了; ...
zang232 发表于 2011-01-05 14:12



   甭不好意思,你说的也是原因之一,且易被人忽略。

论坛徽章:
0
6 [报告]
发表于 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>
复制代码
测试了下,可以重名,这样的话,应该无法计算了把,不然怎么区分呢。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
7 [报告]
发表于 2011-01-06 06:21 |只看该作者
可以重名?什么意思,testnm 是一列名,并不是别名。“应该无法计算了把,不然怎么区分呢。”这句话,是说什么无法计算??

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2011-01-06 07:07 |只看该作者
不知道你的MYSQL是什么版本,我的类似“select *, max(testnm) from test”就报错(要加group),“select max(testnm) from test”则可。还是你的MYSQL作了什么设置,就不会报错。

论坛徽章:
0
9 [报告]
发表于 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>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP