2016-04-13 179 views
0

對子查詢很新穎,並且發現自己需要幫助。SELECT計算中的SQL子查詢

我想查詢單個數據庫。在該查詢中,我想從該數據庫的兩個變量(SUBQ和TOTAL)計算一個變量。我的問題是這樣的:我的SUBQ變量需要在整個查詢所使用的那些變量之上受到額外的一組WHERE約束。下面簡單的例子代碼:

create table [blah] 
    as select date_part('YEAR',DATE) as Orig_Year, 
      sum([SUBQ variable])/sum(TOTAL) as UD_Rate 
     from [database] 
     where [full query requirements] 
     group by date_part('YEAR',DATE) 

我試圖通過在指定子查詢語句來創建一個計算中的子查詢。所以,例如,

   select date_part('YEAR',DATE1) as Orig_year, 
        sum(a.SUBQ)/sum(b.TOTAL) as UD_Rate 
      from database b, 
        (select SUBQ 
        from database 
        where DATE2 is not null and 
         months_between(DATE3,DATE2) <= 100 and 
         VALUE1 in ('A','B')) a 
      where VALUE2 between 50.01 and 100 
      group by date_part('YEAR',DATE1) 

我在正確的軌道上與我的想法在這裏?我還沒有找到任何接近功能查詢的地方,並且在網上找到一個類似的問題的運氣很少,所以我現在已經拋棄了我的手並且找到了你。雖然我對它們知之甚少,但用SUBQ值創建VIEW並將其與更廣泛的查詢合併在一起會更合適嗎?

想要餡餅和蛋糕誰願意幫助我這個請求。謝謝。

+0

這將有助於如果你能告訴子查詢和完整的查詢要求 –

+0

你這樣做簡化了我們不能建立查詢。向我們展示數據庫模式,樣本數據和預期結果。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)瞭解如何提高您的問題質量並獲得更好的答案。 –

+0

夠公平的。添加... –

回答

1

我想你只是想在窗口函數中聚合條件。像這樣的東西:

select sum(case when [subquery requirements] then t.subq else 0 end)/sum(t.Total) 
from t; 

我很確定這是你在找什麼。在你create table方面:

select date_part('YEAR',DATE) as Orig_Year, 
     sum(case when ?? then Total else 0 end)/sum(TOTAL) as UD_Rate 
    from [database] 
    where [full query requirements] 
    group by date_part('YEAR', DATE); 

我猜測,要比較的列Total,須在when的條件。

+0

這是一個很好的建議,也許我已經過時了。我會給你一個機會,看看它是如何發展的。謝謝。 –

+0

這工作完美。 –

0

使用共表-表達則:

-- Define the CTE expression name and column list. 
WITH subquery (Orig_year, UD_Rate) 
AS 
-- Define the CTE query. 
(
    select date_part('YEAR',DATE1) as Orig_year, 
        sum(a.SUBQ)/sum(b.TOTAL) as UD_Rate 
      from database b, 
        (select SUBQ 
        from database 
        where DATE2 is not null and 
         months_between(DATE3,DATE2) <= 100 and 
         VALUE1 in ('A','B')) a 
      where VALUE2 between 50.01 and 100 
      group by date_part('YEAR',DATE1) 
) 

然後用subquery,你會用一個表的主查詢中