2016-03-31 5 views
0

によって加算され、グループ化された:カスタム列とSQL SELECTクエリには、基本的に1で2つのクエリを実行し、それらを結合しようとすると、列

まずクエリを:

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 

2番目のクエリ:

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

ご鑑賞いただきありがとうございます。これらの2つを1つのSELECTクエリに組み合わせる効率的な方法がある場合はお知らせください。

乾杯。

+0

最終的な答えを使用した:money_volume_sum AS SELECT SUM(money_volume)、( SELECT symbols.exchange、stocks.close FROM 為替 * money_volume AS ON銘柄を登録しよう シンボルからstocks.volume symbols.id = stocks.id WHERE stocks.t = '20160323' money_volume_sumのDESC – Aoi

答えて

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 
+0

ありがとうございます!それが動作するように見えた! – Aoi

0

この概念を派生テーブル(see details in the docs)といいます。基本的に、あなたは単にかっこであなたの最初のクエリを入れて、2番目のクエリの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 
+0

BY為替 ORDER BY money_volumeのDESC )トン GROUP BY ORDERは、fをありがとうまたは追加された情報! – Aoi

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 
関連する問題