对2个表中的多个列求和

时间:2015-01-30 23:20:55

标签: mysql

我有两个表(sales_today和last_year_same_day_sales)。从sales_today表中,我想将t_net_sales和t_gross_margin列相加。 从last_year_same_day_sales,我想将ly_net_sales和ly_gross_margin列相加并在一个表中显示结果,如下所示

sales_today
store_number | t_net_sales | t_gross_margin
1            | 100.00      | 20.00
2            | 150.00      | 35.00

last_year_same_day_sales
store_number | ly_net_sales| ly_gross_margin
1            | 175.00      | 50.00
2            | 125.00      | 25.00
3            | 75.00       | 10.00

results
today_net_sales | last_year_net_sales | today_gross_margin | last_year_gross_margin
250.00          | 375.00              | 55.00              | 85.00

这是我的问题:

SELECT
  (SELECT SUM(t_net_sales) FROM sales_today) AS today_net_sales,
  (SELECT SUM(ly_net_sales) FROM last_year_same_day_sales) AS last_year_net_sales,
  (SELECT SUM(t_gross_margin) FROM sales_today) AS today_gross_margin,
  (SELECT SUM(ly_gross_margin) FROM last_year_same_day_sales) AS last_year_gross_margin

我在查询中得到了正确的结果。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以将子查询移动到from子句,只使用两个:

SELECT st.today_net_sales, st.today_gross_margin,
       ly.last_year_net_sales, ly.last_year_gross_margin
FROM (SELECT SUM(t_net_sales) as today_net_sales,
             SUM(t_gross_margin) as today_gross_margin
      FROM sales_today
     ) st CROSS JOIN
     (SELECT SUM(ly_net_sales) as last_year_net_sales,
             SUM(ly_gross_margin) as last_year_gross_margin
      FROM last_year_same_day_sales
     ) ly;

这应该比您的版本具有更好的性能,因为这两个表只扫描一次。