我有一个类似这样的 SQL 语句:
SELECT COUNT(*) AS foo, SUM(foo) AS foo_sum FROM bar
但是 MySQL 不允许这样做,因为 foo 是一个别名。有谁知道如何在 SQL 中实现这一点?
我有一个类似这样的 SQL 语句:
SELECT COUNT(*) AS foo, SUM(foo) AS foo_sum FROM bar
但是 MySQL 不允许这样做,因为 foo 是一个别名。有谁知道如何在 SQL 中实现这一点?
不,您不能在选择列表或 WHERE 子句中使用别名。您只能在 GROUP BY、HAVING 或 ORDER BY 中使用别名。
您还可以使用在子查询中定义的别名:
SELECT foo, SUM(foo) AS foo_sum
FROM (
SELECT COUNT(*) AS foo
FROM bar
);
SELECT SUM(foo) as foo_sum
FROM
(
SELECT COUNT(*) AS foo
FROM bar
GROUP BY baz
)
我认为这不是一个好主意。如果要进行大查询,最好不使用子查询。COUNT(*)
如果需要,请使用不带别名的更大功能。
我用别名和子查询进行了查询。花了大约一个小时!然后我复制了没有别名的查询。它下降到大约45分钟。在这种情况下忘记子查询。它不那么难而且更漂亮,但它会使您的查询变慢。
我不知道您要做什么,但是使用上述解决方案,您在别名表上运行子查询效率不高。
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。