如何在另一个子查询中使用子查询返回的字段名



示例:

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

最新更新