MySQL-联合查询

时间:2019-07-19 16:29:21

标签: mysql sql union

我有一个产品表,其中一个产品可以具有3种不同的包装尺寸和价格:

  id    | packsize1 | price1 | packsize2 | price2   | packsize3 | price3
-------------------------------------------------------------------------------
  1     |    1g     |  10.00 |     5g    |   25.00  |    10g    |  50.00
  2     |    1g     |  12.00 |     5g    |   27.00  |    10g    |  55.00
  3     |    5g     |  30.00 |     10g   |   40.00  |    50g    |  60.00
  4     |    2g     |  20.00 |     5g    |   35.00  |    50g    |  60.00
  5     |    1g     |  10.00 |     5g    |   35.00  |    10g    |  60.00

如何仅以1g,5g和10g数量返回包装大小和价格的产品列表,如下所示:

  id    | packsize1 | price1 | packsize2 | price2   | packsize3 | price3
-------------------------------------------------------------------------------
  1     |    1g     |  10.00 |     5g    |   25.00  |    10g    |  50.00
  2     |    1g     |  12.00 |     5g    |   27.00  |    10g    |  55.00
  3     |    1g     |  null  |     5g    |   30.00  |    10g    |  40.00
  4     |    1g     |  null  |     5g    |   35.00  |    10g    |  null
  5     |    1g     |  10.00 |     5g    |   35.00  |    10g    |  60.00

3 个答案:

答案 0 :(得分:0)

归一化的设计可能看起来像这样。从这里开始,问题很简单...

df8 = pd.DataFrame([Accuracy])
df8.to_csv('accuracies.csv',header=False, mode='a')

答案 1 :(得分:0)

您可以取消透视和重新透视数据。在MySQL中,这看起来像:

select id,
       '1g' as packsize_1g,
       max(case when packsize = '1g' then price end) as price_1g,
       '5g' as packsize_5g,
       max(case when packsize = '5g' then price end) as price_5g,
       '10g' as packsize_10g,
       max(case when packsize = '10g' then price end) as price_10g,
from ((select id, packsize1 as packsize, price1 as price
       from t
      ) union all
      (select id, packsize2, price2
       from t
      ) union all
      (select id, packsize3, price3
       from t
      )
     ) t
where packsize in ('1g', '5g', '10g')
group by id;

答案 2 :(得分:0)

试试这个-

SELECT ID,
CASE WHEN packsize1 = '1g' THEN packsize1 WHEN packsize2 = '1g' THEN packsize2 WHEN packsize3 = '1g' THEN packsize3 END packsize1,
CASE WHEN packsize1 = '1g' THEN price1 WHEN packsize2 = '1g' THEN price2 WHEN packsize3 = '1g' THEN price3 END price1,

CASE WHEN packsize1 = '5g' THEN packsize1 WHEN packsize2 = '5g' THEN packsize2 WHEN packsize3 = '5g' THEN packsize3 END packsize2,
CASE WHEN packsize1 = '5g' THEN price1 WHEN packsize2 = '5g' THEN price2 WHEN packsize3 = '5g' THEN price3 END price2,

CASE WHEN packsize1 = '10g' THEN packsize1 WHEN packsize2 = '10g' THEN packsize2 WHEN packsize3 = '10g' THEN packsize3 END packsize3,
CASE WHEN packsize1 = '10g' THEN price1 WHEN packsize2 = '10g' THEN price2 WHEN packsize3 = '10g' THEN price3 END price3

FROM product
相关问题