簡體   English   中英

如何對第1列求和並按條件選擇第2列?

[英]How to SUM column 1 and select column 2 by condition?

如果列B >= 50選擇此行ID,則我一直在考慮如何對列A求和並選擇列B的條件。

像這樣的示例表+----+-----------+---------+ | ID | PRICE | PERCENT | +----+-----------+---------+ | 1 | 5 | 5 | | 2 | 18 | 20 | | 3 | 7 | 50 | | 4 | 16 | 56 | | 5 | 50 | 87 | | 6 | 17 | 95 | | 7 | 40 | 107 | +----+-----------+---------+ +----+-----------+---------+ | ID | PRICE | PERCENT | +----+-----------+---------+ | 1 | 5 | 5 | | 2 | 18 | 20 | | 3 | 7 | 50 | | 4 | 16 | 56 | | 5 | 50 | 87 | | 6 | 17 | 95 | | 7 | 40 | 107 | +----+-----------+---------+

SELECT ID, SUM(PRICE) AS PRICE, PERCENT FROM Table

IDPERCENT ,我想從PERCENT >= 50的行中選擇

結果應該是

在此處輸入圖片說明

有什么建議么?

請嘗試以下查詢:

declare @tbl table(ID int, PRICE int, [PERCENT] int);
insert into @tbl values
(1, 5, 5),
(2, 18, 20),
(3, 7, 50),
(4, 16, 56),
(5, 50, 87),
(6, 17, 95),
(7, 40, 107);

select top 1 ID,
             (select sum(PRICE) from @tbl) PRICE,
             [PERCENT]
from @tbl
where [PERCENT] > 50

您可以在查詢的SELECT子句中將總計包括在子查詢中,如下所示:

SELECT
    [ID],
    (SELECT SUM([PRICE]) FROM T) AS [PRICE],
    [PERCENT]
FROM
    T
WHERE
    [PRICE] >= 50

但是,尚不清楚應選擇五個有效記錄中的哪個。 您指出這應該是PERCENT值為56的記錄,但IMHO值為50也是可能的,就像87、95和107(?)一樣。 目前尚不清楚為什么選擇值56作為正確的值。 如果沒關系,則可以在SELECT子句中使用TOP (1) ,但如果有關系,則應使用適當的條件/過濾器擴展WHERE子句。

這樣將來自組的聚合數據與單個元素/記錄混合在一起通常是模糊的。 我認為這是一種“代碼異味”,在您關於StackOverflow的問題中,這可能表示XY問題 無論如何,如果您不小心,這些查詢結果可能很容易被誤解。 始終記住,結果中的此類匯總數據(在本例中為PRICE字段)與結果中的明細數據(在本例中為IDPERCENT字段)幾乎無關。 除非您想將匯總數據與明細數據結合起來(例如在計算中),但是您沒有表示您想要在問題中使用類似的東西...

您可以執行此技巧以使1個查詢中有2個查詢的結果:

 select ID as ID,T.[PERCENT] AS B, 0 as sumA
 from Table_1 as T
 where T.[PERCENT]>=50
 union All
 select 0 as ID,0 AS B, sum(t.[PRICE]) as sumA
 from Table_1 as T

不確定為什么需要這樣做,但是可以肯定的是,您可以使用以下查詢對以上輸出進行存檔

樣本數據

declare  @data table
(Id int, Price int, [Percent] int)
insert @data
VALUES (1,5,5),           
      (2,18,20),
      (3,7,50),
      (4,16,56),
      (5,50,87),
      (6,17,95),
      (7,40,107)

詢問

select top 1 ID,  (select sum(price) from @data) as Price, [Percent ]
from  @data
where [Percent ] >50

您可以嘗試以下代碼:

SELECT TOP (1) [ID],  SUM(PRICE) OVER (),  [PERCENT] 
FROM @tbl
ORDER BY CASE WHEN [PERCENT] > 50 THEN 0 ELSE 1 END, [ID];

我正在使用OVER子句,以便僅從表中提取/讀取數據一次-一次表掃描。

暫無
暫無

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

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