4

我有一个类似这样的 SQL 语句:

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

但是 MySQL 不允许这样做,因为 foo 是一个别名。有谁知道如何在 SQL 中实现这一点?

4

4 回答 4

5

不,您不能在选择列表或 WHERE 子句中使用别名。您只能在 GROUP BY、HAVING 或 ORDER BY 中使用别名。

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

SELECT foo, SUM(foo) AS foo_sum
FROM (
  SELECT COUNT(*) AS foo
  FROM bar
);
于 2008-12-16T22:27:23.290 回答
1
SELECT SUM(foo) as foo_sum
FROM 
(
    SELECT COUNT(*) AS foo
    FROM bar
    GROUP BY baz
)
于 2008-12-16T22:22:45.763 回答
0

我认为这不是一个好主意。如果要进行大查询,最好不使用子查询。COUNT(*)如果需要,请使用不带别名的更大功能。

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

于 2010-08-16T13:27:22.103 回答
0

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

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

基本上 T 是您的别名表,它返回带有 count 的 foo 列,这是单条记录,并且没有使用 SUM(foo) 函数的意义,因为它是单条记录。

无论如何简单的答案:

SELECT Count(1) AS foo from employees;

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

于 2017-11-24T11:04:46.217 回答