尝试在一个基本上做两个查询并加入它们:
首先查询:
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查询,请与我们联系。
干杯。
答案 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