示例:
SELECT COUNT(id) AS total_orders,
( ( SELECT COUNT(id) FROM orders WHERE status = 'Closed' ) / total_orders * 100) AS percent_closed_orders
FROM orders
问题:如何在子查询中使用total_orders?我得到一个错误";"字段列表"中的未知列"total_orders";。
SELECT COUNT(id) AS total_orders,
SUM( status = 'Closed' ) / COUNT(id) * 100 AS percent_closed_orders
FROM orders
如果id
不能为NULL(例如它是主键(,则可以使用COUNT(*)
来计算总行数。
不能在定义列别名的同一SELECT语句中使用列别名。但是,如果在外部SELECT语句中定义了别名,则可以在随后的SELECT语句中使用该别名。
在您的示例中,您需要将内部SELECT语句移动到子查询中,以便能够使用total_orders别名:
SELECT COUNT(id) AS total_orders,
( ( SELECT COUNT(id) FROM orders WHERE status = 'Closed' ) / (SELECT total_orders FROM (SELECT COUNT(id) AS total_orders FROM orders) AS x) * 100) AS percent_closed_orders
FROM orders