如何从MySQL视图中正确选取聚合计算列sum(amt)?
解决视图中聚合列查询报错的问题
这问题我碰到过,核心原因是你创建视图时没有给SUM(amt)这个聚合结果列定义别名,导致MySQL把这个列的默认名称识别成了带特殊符号的sum(amt),直接查询就会踩坑。
为什么原来的查询不行?
- 执行
select sum(amt) from blackjack_balance;时,MySQL会误以为你要对视图里的amt列再次求和,但视图里根本不存在amt列(只有user_id和聚合后的结果列),所以报错“Unknown column 'amt' in 'field list'”。 - 执行
select "sum(amt)" from blackjack_balance;时,双引号在MySQL里默认表示字符串常量,所以返回的是重复两次的字符串sum(amt),而不是你要的数值结果。
正确的解决方案
步骤1:修改视图,给聚合列加别名
推荐给聚合列起一个有意义的别名(比如total_balance),后续查询更清晰:
CREATE OR REPLACE VIEW blackjack_balance AS SELECT user_id, SUM(amt) AS total_balance FROM blackjack_balance_change GROUP BY user_id;
如果你非要保留sum(amt)作为列名,需要用反引号把它括起来(因为包含特殊符号):
CREATE OR REPLACE VIEW blackjack_balance AS SELECT user_id, SUM(amt) AS `sum(amt)` FROM blackjack_balance_change GROUP BY user_id;
步骤2:查询目标列
- 如果用了
total_balance别名,直接查询:
会得到:SELECT total_balance FROM blackjack_balance;+---------------+ | total_balance | +---------------+ | 2 | | -2 | +---------------+ - 如果用了
sum(amt)作为别名,查询时必须用反引号括起来:
就能得到你期望的输出:SELECT `sum(amt)` FROM blackjack_balance;+----------+ | sum(amt) | +----------+ | 2 | | -2 | +----------+
内容的提问来源于stack exchange,提问作者jcarpenter2
相关产品推荐
相关产品推荐

