[英]MySQL - Join two tables, different columns in table 1 on the same column in table 2
[英]How to perform aggregation in two different columns of same table and join in mysql?
DB 由一個名為floorsheet_table
的表組成,其中包含如下數據:
+-------+--------------+---------------+----------+
| scrip | buyer_broker | seller_broker | quantity |
+-------+--------------+---------------+----------+
| AKPL | 1 | 34 | 80 |
| AKPL | 1 | 1 | 100 |
| AKPL | 34| 56 | 1000 |
| AKPL | 1 | 40 | 200 |
| AKPL | 1 | 35 | 50 |
| AKPL | 1 | 52 | 50 |
| AKPL | 52 | 56 | 120 |
| AKPL | 1 | 56 | 140 |
| AKPL | 17 | 56 | 100 |
| AKPL | 41 | 56 | 100 |
+-------+--------------+---------------+----------+
我想通過聚合buyer_broker 和seller_broker 字段來查找數量總和:
SUM(quantity)
字段命名為“購買”。 例子:SELECT scrip, buyer_broker AS 'BROKER', SUM(quantity) AS 'BOUGHT' FROM floorsheet_table GROUP BY scrip, buyer_broker;
+-------+--------+--------+
| scrip | BROKER | BOUGHT |
+-------+--------+--------+
| AKPL | 1 | 21533 |
| AKPL | 17 | 11540 |
| AKPL | 41 | 31103 |
| AKPL | 49 | 43826 |
| AKPL | 45 | 44402 |
| AKPL | 54 | 16685 |
| AKPL | 6 | 12609 |
| AKPL | 4 | 7220 |
| AKPL | 38 | 13824 |
| AKPL | 21 | 20214 |
+-------+--------+--------+
SUM(quantity)
字段命名為“SOLD”。 例子:SELECT scrip, seller_broker AS 'BROKER', SUM(quantity) AS 'SOLD' FROM floorsheet_table GROUP BY scrip, seller_broker;
+-------+--------+-------+
| scrip | BROKER | SOLD |
+-------+--------+-------+
| AKPL | 4 | 59762 |
| AKPL | 16 | 46460 |
| AKPL | 58 | 40658 |
| AKPL | 45 | 38380 |
| AKPL | 49 | 35361 |
| AKPL | 38 | 34227 |
| AKPL | 44 | 33393 |
| AKPL | 59 | 32817 |
| AKPL | 56 | 31125 |
| AKPL | 35 | 30368 |
+-------+--------+-------+
但我希望這些結果顯示在同一張桌子上。 他們將scrip
和BROKER
作為公共字段。 所以新表應該是這樣的:
+-------+--------+--------+----------+
| scrip | BROKER | BOUGHT | SOLD |
+-------+--------+--------+----------+
此外:
SOLD
為0
。我實現這一目標的失敗嘗試之一是:
SELECT b.scrip AS 'SCRIP', b.buyer_broker AS 'BROKER', b.BOUGHT as 'BOUGHT', s.SOLD as 'SOLD' FROM
SELECT scrip, buyer_broker as 'BROKER', SUM(quantity) AS 'BOUGHT' FROM floorsheet_table AS b GROUP BY b.scrip, b.buyer_broker INNER JOIN
SELECT scrip, seller_broker as 'BROKER', SUM(quantity) AS 'SOLD' FROM floorsheet_table AS s GROUP BY scrip, seller_broker ON b.buyer_broker=s.seller_broker;
這引發了錯誤:
SELECT is not valid at this position for this server version, expecting '(', WITH
為此,您需要 Mysql 沒有的 FULL OUTER JOIN。
在大桌子上,這有點慢
CREATE TABLE floorsheet_table ( `scrip` VARCHAR(4), `buyer_broker` INTEGER, `seller_broker` INTEGER, `quantity` INTEGER ); INSERT INTO floorsheet_table (`scrip`, `buyer_broker`, `seller_broker`, `quantity`) VALUES ('AKPL', '1', '34', '80'), ('AKPL', '1', '1', '100'), ('AKPL', '34', '56', '1000'), ('AKPL', '1', '40', '200'), ('AKPL', '1', '35', '50'), ('AKPL', '1', '52', '50'), ('AKPL', '52', '56', '120'), ('AKPL', '1', '56', '140'), ('AKPL', '17', '56', '100'), ('AKPL', '41', '56', '100');
SELECT buy1.`scrip`,buy1.`BROKER`,`BOUGHT`,`SOLD` FROM (SELECT scrip, buyer_broker AS 'BROKER', SUM(quantity) AS 'BOUGHT' FROM floorsheet_table GROUP BY scrip, buyer_broker) buy1 LEFT JOIN (SELECT scrip, seller_broker AS 'BROKER', SUM(quantity) AS 'SOLD' FROM floorsheet_table GROUP BY scrip, seller_broker) sell1 ON buy1.`scrip` = sell1.`scrip` AND buy1.`BROKER` = sell1.`BROKER` UNION SELECT sell2.`scrip`,sell2.`BROKER`,`BOUGHT`,`SOLD` FROM (SELECT scrip, buyer_broker AS 'BROKER', SUM(quantity) AS 'BOUGHT' FROM floorsheet_table GROUP BY scrip, buyer_broker) buy2 RIGHT JOIN (SELECT scrip, seller_broker AS 'BROKER', SUM(quantity) AS 'SOLD' FROM floorsheet_table GROUP BY scrip, seller_broker) sell2 ON buy2.`scrip` = sell2.`scrip` AND buy2.`BROKER` = sell2.`BROKER`
腳本 | 經紀人 | 買了| 已售出:---- | -----: | -----: | ---: AKPL | 1 | 620 | 100 AKPL | 34 | 1000 | 80 AKPL | 52 | 120 | 50 AKPL | 17 | 100 | null AKPL | 41 | 100 | null AKPL | 56 | null | 第1460章 40 | null | 200 AKPL | 35 | null | 50
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.