MySQL:在聚合函数中使用别名字段

时间:2008-12-16 22:16:26

标签: mysql alias aggregate-functions

我有一个与此类似的SQL语句:

SELECT COUNT(*) AS foo, SUM(foo) AS foo_sum FROM bar

但MySQL不允许这样做,因为foo是别名。有没有人知道如何在SQL中完成这项工作?

4 个答案:

答案 0 :(得分:5)

不,您不能在select-list或WHERE子句中使用别名。您只能在GROUP BY,HAVING或ORDER BY中使用别名。

您还可以使用子查询中定义的别名:

SELECT foo, SUM(foo) AS foo_sum
FROM (
  SELECT COUNT(*) AS foo
  FROM bar
);

答案 1 :(得分:1)

SELECT SUM(foo) as foo_sum
FROM 
(
    SELECT COUNT(*) AS foo
    FROM bar
    GROUP BY baz
)

答案 2 :(得分:0)

我认为这不是一个好主意。如果你想做一个大的查询,最好不要使用子查询。如果需要,可以使用COUNT(*)和更大的函数而不使用别名。

我使用别名和子查询进行了查询。花了大约一个小时!然后我重现了没有别名的查询。它下降到大约45分钟。在这种情况下忘记子查询。它不那么难,也更漂亮,但它会让你的查询变慢。

答案 3 :(得分:0)

我不知道你要做什么但是使用上面的解决方案你在别名表上运行子查询效率不高。

SELECT foo 
FROM (SELECT COUNT(*) AS foo FROM employees) AS T;

基本上T是你的别名表,它返回foo列,其中count是单个记录,因为它是单个记录,所以没有使用SUM(foo)函数的意思。

无论如何简单回答:

SELECT Count(1) AS foo from employees;

由于COUNT函数将返回相同的结果,无论您包含哪些NOT NULL字段作为COUNT函数参数(即:在括号内),您都可以使用COUNT(1)来获得更好的性能。现在,数据库引擎不必获取任何数据字段,而只是检索整数值1。