带有自定义列的SQL SELECT查询,然后按列进行求和和分组

时间:2016-03-31 21:31:22

标签: mysql

尝试在一个基本上做两个查询并加入它们:

首先查询:

SELECT y.exchange
      ,  k.close * k.volume money_volume  
 FROM symbols y
JOIN stocks k 
    ON y.id = k.id  
 WHERE k.t = '20160323'  
  ORDER 
    BY money_volume DESC  

第二次查询:

SELECT SUM(money_volume) AS money_volume_sum  
  FROM [table just made above]  
 GROUP 
    BY symbols.exchange  

感谢您的审核,如果您有一种有效的方法将这两者合并为一个SELECT查询,请与我们联系。

干杯。

3 个答案:

答案 0 :(得分:0)

此概念称为派生表(see details in the docs)。基本上,您只需将第一个查询放在括号中,并将其放在第二个查询的FROM子句中:

SELECT SUM(money_volume) AS money_volume_sum  
FROM (
  SELECT y.exchange
      ,  k.close * k.volume money_volume  
  FROM symbols y
  JOIN stocks k 
    ON y.id = k.id  
  WHERE k.t = '20160323'
  -- In some databases, including SQL Server, derived tables must not have any ORDER BY
  -- clause, unless accompanied by TOP or OFFSET / FETCH
) t -- You must give this derived table a name
GROUP BY exchange 

答案 1 :(得分:0)

SELECT SUM(money_volume) AS money_volume_sum  
FROM (
    SELECT symbols.exchange, stocks.close * stocks.volume AS money_volume  
    FROM symbols  
    JOIN stocks ON symbols.id = stocks.id  
    WHERE stocks.t = '20160323'  
    ORDER BY money_volume DESC  
) t
GROUP BY exchange  

答案 2 :(得分:0)

您可以使用虚拟表格,使事情变得非常清晰。特别是当您最终加入15个以上的子结果时。

WITH CTE as (
SELECT y.exchange
      ,  k.close * k.volume money_volume  
 FROM symbols y
JOIN stocks k 
    ON y.id = k.id  
 WHERE k.t = '20160323'  
  )


SELECT SUM(CTE.money_volume) AS money_volume_sum  
FROM CTE
GROUP BY symbols.exchange  
ORDER BY CTE.money_volume