将有效的mysql查询转换为Mathematica语句

时间:2013-05-31 15:02:55

标签: mysql wolfram-mathematica

我有一个有效的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. >>
然后我需要绘制直方图。我已花了一个小时的时间,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

您的数据采用多个子列表的列表形式,每个子列表包含两个元素。像这样:

{{cnt1,description1},{cnt2,description2},...}

您的映射构造/@ result选出每个子列表并将其交给匿名函数。因此,匿名函数中的#是一个列表{cnt,description}。因此#[[1]]是cnt,#[[2]]是描述。但是,如果#[[1,2]]是列表,那么您正在尝试检索cnt cnt的第二个元素。但由于它不是列表,因此无法检索该元素。它不存在。您正在寻找#[[1]]#[[2]],但从不#[[1,something]],因为那不是您拥有的那种数据。