Mysql内连接或左连接

时间:2017-11-30 11:48:17

标签: mysql sql 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   |

如何在一个查询中执行此操作?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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