Reputation: 4666
like this
SELECT
brand,
SUM(unicom.amount_total) AS sale,
COUNT(sale_order.name) AS qty,
SUM(sale_order.amount_total)*0.15 + COUNT(sale_order_line.name)*65 + (SUM(sale_order.amount_total)*0.15 + COUNT(sale_order_line.name)*65)*0.14
FROM
sale_order,
unicommerce
......
I want to reduce the complexity in reading queries like above.
Is there any way to use aliases sale and qty in select itself?
I am using version 9.3.6
Upvotes: 0
Views: 793
Reputation: 32296
No, you cannot do that. But you can make the calculation less verbose by using table aliases and sub-queries, but that may incur a performance penalty:
SELECT
brand,
sum(u.amount_total) AS sale,
s.qty,
s.at15 + s.l_num + (s.at15 + s.l_num) * 0.14 AS big_sum
FROM (
SELECT count(*) AS qty, sum(amount_total)*0.15 AS at15, l.num AS l_num
FROM sale_order so
JOIN (
SELECT sales_order, count(*) * 65 AS num
FROM sale_order_line
GROUP BY sales_order) l ON l.sales_order = s.id
GROUP BY name
) s
JOIN unicommerce u ON ......
In general, you perform every calculation at the lowest possible level - e.g. where you have access to all required columns, then assign an alias and use that in higher-level queries.
Upvotes: 0
Reputation: 30597
Unfortunately you cannot reference SELECT fields in the same SELECT-List via their aliases. You can, however, reference the aliases in an outer query, like this:
SELECT
brand,
sale,
qty,
sale*0.15 + qty*65 + (sale*0.15 + qty*65)*0.14
FROM (
SELECT
brand,
SUM(unicom.amount_total) AS sale,
COUNT(sale_order.name) AS qty,
FROM
sale_order,
unicommerce
......
);
You can also use the aliases in ORDER BY clauses (but not WHERE, ORDER BY or HAVING).
See: select-lists in the manual.
Upvotes: 1
Reputation: 51599
yes, you can use your initial query as subquery:
select
sale
, qty
, sum
from
(
SELECT
brand,
SUM(unicom.amount_total) AS sale,
COUNT(sale_order.name) AS qty,
SUM(sale_order.amount_total)*0.15 + COUNT(sale_order_line.name)*65 + (SUM(sale_order.amount_total)*0.15 + COUNT(sale_order_line.name)*65)*0.14
FROM
sale_order,
unicommerce
...) SUBQ
or create a view and query a view
Upvotes: 0