我有一个有效的mysql查询:
SELECT COUNT(*), c.description
FROM name_loc f
INNER JOIN countries c ON f.fk_cnty_id = c.id
INNER JOIN identifiers i ON f.fk_ident_id = i.id
GROUP BY f.fk_cnty_id;
它返回:
+------+----------------+
| cnt | description |
+------+----------------+
| 1093 | AUSTRALIA |
| 235 | BELGIUM |
| 474 | BERMUDA |
我需要一个声明,允许我绘制直方图,其中垂直轴是计数,水平轴是县。
我认为这样可行:
totalCntLByCnty = {#[[1, 2]], #[[2]]} & /@ SQLExecute[conn, "
SELECT COUNT(*), c.description
FROM name_loc f
INNER JOIN countries c ON f.fk_cnty_id = c.id
INNER JOIN identifiers i ON f.fk_ident_id = i.id
GROUP BY f.fk_cnty_id
"]
我收到此错误:
Part::partd: Part specification {2,ANDORRA}[[1,2]] is longer than depth of object. >>
然后我需要绘制直方图。我已花了一个小时的时间,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
您的数据采用多个子列表的列表形式,每个子列表包含两个元素。像这样:
{{cnt1,description1},{cnt2,description2},...}
您的映射构造/@ result
选出每个子列表并将其交给匿名函数。因此,匿名函数中的#
是一个列表{cnt,description}
。因此#[[1]]
是cnt,#[[2]]
是描述。但是,如果#[[1,2]]
是列表,那么您正在尝试检索cnt
cnt
的第二个元素。但由于它不是列表,因此无法检索该元素。它不存在。您正在寻找#[[1]]
或#[[2]]
,但从不#[[1,something]]
,因为那不是您拥有的那种数据。