私は私のデータベースでこの選択クエリを実行しています:
Select Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate,
Sum(bid.bidPrice) over () as TotalBids
from Bid
inner join Item on bid.ItemId=Item.ItemId
where BidDate between '2016-08-24' and '2017-11-15'
私は以下の結果を得ています:
ItemId ItemDescription BidPrice BidDate TotalBids
1 Frame 35 2016-08-24 3624
4 Wooden chair 40 2016-10-25 3624
2 Car 3000 2017-10-26 3624
3 Stand Fan 29 2017-10-30 3624
5 Black Sofa 400 2017-11-11 3624
6 Cabinet 120 2017-11-15 3624
私の質問は次のとおりです。各行に合計があるTotal Bids
列の代わりに、BidPrice
列の下部に1つの合計しか表示されない可能性はありますか?
GROUP BY GROUPING SETS
NULL
セット
SELECT itemid, itemdescription, biddate, totalbids, sum(bidprice)
FROM f
GROUP BY GROUPING SETS ( (itemid,itemdescription,biddate,totalbids), () );
itemid | itemdescription | biddate | totalbids | sum
--------+-----------------+------------+-----------+------
1 | Frame | 2016-08-24 | 3624 | 35
2 | Car | 2017-10-26 | 3624 | 3000
3 | Stand Fan | 2017-10-30 | 3624 | 29
4 | Wooden chair | 2016-10-25 | 3624 | 40
5 | Black Sofa | 2017-11-11 | 3624 | 400
6 | Cabinet | 2017-11-15 | 3624 | 120
| | | | 3624
(7 rows)
PostgreSQLで動作することが確認されています。 SQL Server 2014およびSQL Server 2016。
CREATE TABLE f(
itemid int,
itemdescription varchar(255),
bidprice int,
biddate date,
totalbids int
)
INSERT INTO f VALUES
( 1, 'Frame ', 35 , '2016-08-24', 3624 ),
( 4, 'Wooden chair', 40 , '2016-10-25', 3624 ),
( 2, 'Car ', 3000, '2017-10-26', 3624 ),
( 3, 'Stand Fan ', 29 , '2017-10-30', 3624 ),
( 5, 'Black Sofa ', 400 , '2017-11-11', 3624 ),
( 6, 'Cabinet ', 120 , '2017-11-15', 3624 );
PostgreSQLのドキュメントはこれをはるかによく説明しています
これを行う別の方法は、UNION
を使用することです。
WITH t AS (SELECT * FROM f)
SELECT *
FROM f
UNION ALL
SELECT null, null, (SELECT sum(bidprice) FROM f), null, null;
クエリの場合、最初のメソッドは次のようになります。
SELECT Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate, sum(bidPrice)
FROM Bid
INNER JOIN Item ON bid.ItemId=Item.ItemId
WHERE BidDate between '2016-08-24' and '2017-11-15'
GROUP BY GROUPING SETS ( (Item.ItemId, Item.ItemDescription, Bid.BidPrice, bid.BidDate), () )