簡體   English   中英

SQL為按列分組的每組行划分兩個列值

[英]SQL Dividing two column values for each set of rows grouped by a column

目前,我有一個包含以下三個表

變量 :公司名稱,數據日期和價格。

該表中包含的數據具有時間序列性質。 對於每個公司名稱,都有行,其中包含company_name,price和兩個日期之一,即'20011231''20111230'

此數據集中沒有重復項。 我想提供一個查詢,該查詢將每個company_name組的日期'20111230'的價格除以日期'20011231'的價格。

此外,如果沒有同時包含兩個日期的行,我想刪除所有company_name行。

對於第一個查詢,我嘗試了以下代碼,但它給出了以下錯誤:“操作數數據類型varchar對於除法運算符無效。”

SELECT (SELECT prc
        FROM A_returns
        WHERE [date] = '20111230'
        GROUP BY [comnam], [PRC])/
       (SELECT prc
        FROM A_returns
        WHERE [date] = '20111230'
        GROUP BY [comnam], [PRC]) 
FROM A_returns

為了消除上述錯誤,我嘗試將價格列中的值強制轉換為浮點數,但收到的錯誤與以前相同。

UPDATE A_returns
SET prc = CAST(prc AS float)
GO

你可以做這樣的事情

SELECT t1.comnam, t1.prc / t2.prc AS price_ratio
  FROM A_returns t1 JOIN A_returns t2
    ON t1.comnam = t2.comnam
   AND t1.date = '20111230'
   AND t2.date = '20111231'

樣本輸出:

|   COMNAM |    PRICE_RATIO |
|----------|----------------|
| company1 | 1.052631578947 |
| company2 | 0.909090909091 |

這是SQLFiddle演示

刪除兩個日期都沒有記錄的公司的行

DELETE t1 
  FROM A_returns t1 JOIN
(
    SELECT comnam
    FROM A_returns
    GROUP BY comnam
   HAVING COUNT(*) = 1

) t2
ON t1.comnam = t2.comnam

這是SQLFiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM