簡體   English   中英

MySQL內部連接或左連接

[英]Mysql inner join or left join

我有1個表產品,我想提取類型A和B的產品價格。我嘗試使用INNER JOIN,但它返回重復的記錄。 我怎樣才能做到這一點?

 id   |   Price    |     Date    |   Type   |   Size  |
-------------------------------------------------------
 1    |   1,00     |  01/11/2010 |     A    |   7,00  |
 2    |   2,50     |  02/11/2010 |     A    |   8,00  |
 3    |   2,50     |  03/11/2010 |     A    |   9,00  |
 4    |   3,00     |  02/11/2010 |     A    |  10,00  |
 5    |   4,00     |  03/11/2010 |     A    |  11,00  |
 6    |   4,00     |  03/11/2010 |     A    |  12,00  |
 7    |   5,00     |  03/11/2010 |     A    |  13,00  |
 8    |   5,00     |  03/11/2010 |     A    |  14,00  |
 9    |   6,00     |  03/11/2010 |     A    |  15,00  |
10    |   7,00     |  03/11/2010 |     A    |  16,00  |
11    |   1,00     |  03/11/2010 |     B    |  17,00  |
12    |   2,50     |  03/11/2010 |     B    |  18,00  |
13    |   3,00     |  03/11/2010 |     B    |  19,00  |
14    |   3,00     |  03/11/2010 |     B    |  20,00  |
15    |   5,00     |  03/11/2010 |     B    |  21,00  |
16    |   6,00     |  03/11/2010 |     B    |  22,00  |
17    |   7,00     |  03/11/2010 |     B    |  23,00  |
18    |   7,00     |  03/11/2010 |     B    |  24,00  |

我想建立一個像這樣的表:

 Price    |     Date    |   Size A |   Size B  |
-------------------------------------------------------
 1,00     |  01/11/2010 |    7,00  |   17,00   |
 2,50     |  02/11/2010 |    8,00  |           |
 2,50     |  03/11/2010 |    9,00  |   18,00   |
 3,00     |  02/11/2010 |   10,00  |   19,00   |
 4,00     |  03/11/2010 |   11,00  |           |
 4,00     |  04/11/2010 |   12,00  |           |
 5,00     |  03/11/2010 |   13,00  |   21,00   |
 5,00     |  04/11/2010 |   14,00  |           |
 6,00     |  05/11/2010 |   15,00  |           |
 7,00     |  06/11/2010 |   16,00  |   23,00   |

如何在一個查詢中做到這一點?

謝謝你的幫助。

select price, 
       date, 
       sum(case when `type` = 'A' then size else 0 end) as SizeA,
       sum(case when `type` = 'B' then size else 0 end) as SizeB
from products
group by price, date
order by price, date

date分組以獲取每個日期的數據。 要獲取其他列,您需要使用諸如sum()類的聚合函數。

如果您確實需要null值,則可以執行以下操作:

case when sum(`type` = 'A') = 0 
     then null 
     else sum(case when `type` = 'A' then size end)
end

暫無
暫無

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

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