1

次のテーブルがあります。

オークションテーブル

Id | Title | Description 
------------------------
1  | Test1 | DescriptionForTest1
2  | Test2 | DescriptionForTest2
3  | Test3 | DescriptionForTest3

入札表

AuctionId | UserId | Bidding
----------------------------
1         | 2      | 10
1         | 32     | 24
1         | 2      | 30
1         | 46     | 50
2         | 13     | 5
2         | 20     | 10
and so on...

今、私はこれに似た出力が欲しい

AuctionId | Title | Description | UserId
----------------------------------------
1         | Test1 | Desc...     | 46
2         | Test2 | Desc...     | 20

入札単価が最も高い UserId を使用して、オークションごとに 1 つの行が必要です。

2 つの SQL ステートメントでこれを実行できることを知っています。最初にすべてのオークションを取得し、次に MAX(Bidding) で取得します。しかし、私はこれを 1 つのステートメントで必要としており、機能する SQL ステートメントを取得するのに苦労しています。

誰か助けてくれませんか?

DBMS として MySQL を使用しています。

4

5 に答える 5

1
DROP TABLE IF EXISTS auction;
CREATE TABLE auction
(auction_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,Title VARCHAR(12) NOT NULL UNIQUE
,Description VARCHAR(30) NOT NULL
);

INSERT INTO auction VALUES
(1  ,'Test1','DescriptionForTest1'),
(2  ,'Test2','DescriptionForTest2'),
(3  ,'Test3','DescriptionForTest3');

DROP TABLE IF EXISTS bids;
CREATE TABLE bids
(auction_id INT NOT NULL 
,user_id INT NOT NULL
,bid INT NOT NULL
,PRIMARY KEY (auction_id,user_id,bid)
);

INSERT INTO bids VALUES
(1         ,2      ,10),
(1         ,32     ,24),
(1         ,2      ,30),
(1         ,46     ,50),
(2         ,13     ,5),
(2         ,20     ,10);

SELECT a.*
     , b.user_id
     , b.bid 
  FROM auction a 
  JOIN bids b
    ON b.auction_id = a.auction_id
  JOIN 
     ( SELECT auction_id, MAX(bid) max_bid FROM bids GROUP BY auction_id) c 
    ON c.auction_id = b.auction_id 
   AND c.max_bid = b.bid;
+------------+-------+---------------------+---------+-----+
| auction_id | Title | Description         | user_id | bid |
+------------+-------+---------------------+---------+-----+
|          1 | Test1 | DescriptionForTest1 |      46 |  50 |
|          2 | Test2 | DescriptionForTest2 |      20 |  10 |
+------------+-------+---------------------+---------+-----+
于 2013-06-28T11:26:29.080 に答える
-1
SELECT MAX(BINDING),A.AUCTION_ID,A.DESCRIPTION,A.TITLE,B.USER_ID 
FROM AUCTION_TABLE A,BIDS_TABLE B
WHERE A.AUCTION_ID=B.AUCTION_ID

または結合で試してください

SELECT MAX(BINDING),A.AUCTION_ID,A.DESCRIPTION,A.TITLE,B.USER_ID 
FROM AUCTION_TABLE A
INNER JOIN BIDS_TABLE B ON A.AUCTION_ID=B.AUCTION_ID
于 2013-06-28T11:08:00.453 に答える