How do you get access to the pseudonym column?
-
SELECT `A`.*, SUM(o.quantity) AS `orders`, SUM((CASE WHEN o.date >= ADDDATE(CURRENT_DATE(), -30 +1) THEN o.quantity ELSE 0 END)) AS `orders_period`, SUM(s.quantity) AS `sales`, SUM((CASE WHEN s.date >= ADDDATE(CURRENT_DATE(), -30 +1) THEN s.quantity ELSE 0 END)) AS `sales_period`, ROUND(`sales` / `orders` * 100) AS `buyout` FROM `data_goods` AS A LEFT JOIN `data_orders` AS o ON o.wb_code = A.wb_code AND o.user = A.user AND o.key = A.key LEFT JOIN `data_sales` AS s ON s.wb_code = A.wb_code AND s.user = A.user AND s.key = A.key AND s.sale_id LIKE 'S%' WHERE A.`user` = '0'
On the ROUND line
sales
/orders
* 100) ASbuyout
There's no sales and orders. Although they are in the form of alias above (AS)orders
ASsales
) How do you get access to these columns so you can take a ready value and re-use SUM()?
-
Unfortunately, sql can't turn to the listed column on his alias. There are three options:
- Reuse of SUM
- CTE (WITH), but as far as I know mysql does not support CTE.
- Implement the request, for example:
select prep.*, ROUND(`prep.sales` / `prep.orders` * 100) AS `buyout` FROM (SELECT `A`.*, SUM(o.quantity) AS `orders`, SUM((CASE WHEN o.date >= ADDDATE(CURRENT_DATE(), -30 +1) THEN o.quantity ELSE 0 END)) AS `orders_period`, SUM(s.quantity) AS `sales`, SUM((CASE WHEN s.date >= ADDDATE(CURRENT_DATE(), -30 +1) THEN s.quantity ELSE 0 END)) AS `sales_period` FROM `data_goods` AS A LEFT JOIN `data_orders` AS o ON o.wb_code = A.wb_code AND o.user = A.user AND o.key = A.key LEFT JOIN `data_sales` AS s ON s.wb_code = A.wb_code AND s.user = A.user AND s.key = A.key AND s.sale_id LIKE 'S%' WHERE A.`user` = '0') prep