我已经将一个MySQL表下载为CSV,其中包含以下类型的数千个条目:
id,gender,garment-color
1,male,white
2,"male,female",black
3,female,"red,pink"
现在,当我尝试使用此数据创建图表时,它将“男性”视为一个值,将“男性,女性”视为单独的值。
因此,对于上面的例子,该图表显示了3个不同的类别(“男性”,“女性”,“男性,女性”),而不是计算2个“男性”和3个“女性”。每个
我希望输出如下,以便图表具有正确的计数:
id,gender,garment-color
1,male,white
2,male,black
2,female,black
3,female,red
3,female,pink
我知道的唯一方法是在MS Excel中复制行并手动调整值,这对于1000多个条目来说太繁琐了。还有更好的方法吗?
答案 0 :(得分:0)
从MySQL命令行或用于向MySQL发送查询的任何工具:
select * from the_table
into outfile '/tmp/out.txt' fields terminated by ',' enclosed by '"'
然后下载/tmp/out.txt' from the server and it should be good to go assuming your data is good. If it is not, you might need to massage it with some SQL function use in the
select`。
答案 1 :(得分:0)
csv可能来自设计不佳/规范化的数据库,这些数据库在同一行中具有这两个值。您可以尝试在这些行上使用选择和更新(以及一些内置字符串函数)来生成包含其他值的其他行,并更新其原始行以删除这些值;但你必须重复,直到删除所有逗号(如果在某个字段中有多个逗号),并且必须确定包含多个具有此类逗号分隔列表的字段的行是否需要倍增(即应该是2性别和4颜色平均总共8行)。
更有可能的是,您可能想要为X_garmentcolors和X_genders创建其他表;其中X是原始表应该描述的内容。这些表将具有引用原始行的X_id字段和包含原始行列表中的一个值的[garmentcolor | gender]值字段。理想情况下,它们实际上应该引用[gender | garmentcolor]查找表而不是保存实际值;但是你必须先从你的数据中挑选出所有独特的颜色和性别。完成后,您可以执行以下操作:
INSERT INTO X_[garmentcolor|gender] (X_id, Y_id)
SELECT X.X_id, Y.Y_id
FROM originalTable AS X
INNER JOIN valueTable AS Y
ON X.Y_valuelist LIKE CONCAT('%,' Y.value) -- Value at end of list
OR X.Y_valuelist LIKE CONCAT('%,' Y.value, ',%') -- Value in middle of list
OR X.Y_valuelist LIKE CONCAT(Y.value, ',%') -- Value at start of list
OR X.Y_valuelist = Y.value -- Value is entire list
;