我有一个产品表,其中一个产品可以具有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
答案 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