【问题标题】:Mysql inner join or left joinMysql 内连接或左连接
【发布时间】:2017-11-30 11:48:17
【问题描述】:

我有 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   |

如何在一个查询中做到这一点?

感谢您的帮助。

【问题讨论】:

  • 提供正确的表定义以及您的查询尝试

标签: mysql sql join


【解决方案1】:
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

【讨论】:

  • 我相信你是对的,但也许在这里添加一个解释。
  • 还认为您需要按价格和日期分组(根据他们的数据没有意义),但他们的数据都是相同的日期,但多个返回的行也基于价格出现。跨度>
  • 它只返回 3 行:价格 |日期 | A 码 |尺寸 B | -------------------------------------------------- ----- 1,00 | 2010 年 1 月 11 日 | 0 | 0 | 2,00 | 2010 年 2 月 11 日 | 0 | | 1,00 | 2010 年 3 月 11 日 | 0 | 0 |你说得对 DRapp 我必须按日期和价格过滤
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2014-02-12
  • 2016-08-31
  • 2013-01-30
相关资源
最近更新 更多