背景
我正在本地 SQL 服务器上对大型数据集进行数据分析。该分析的很大一部分是表格内容:频率表等,它们总结了关键变量的各个方面。
我所有的写作都是在 LaTeX 环境 (Overleaf,用 XeLaTeX 编译) 中完成的,这意味着我经常将内容从 SQL (以及从 R,我在其中进行分析的其他部分) 带入 TeX 文档中。
问题
在很多情况下,我会尝试构建我的 SQL 查询,以便它们能够准确地找到我正在寻找的表。
我对社区的问题是:你们有没有喜欢的、简洁的或首选的方法将 SQL 查询结果转换为 LaTeX 表?
我尝试过的方法
以一个简单的 Postgres 数据库为例,如下所示:
假设我想要一个简单的表格,将每个错误的数量加起来id
:
select id as "ID", sum(errors) as "Sum of errors"
from d
group by id
在 DataGrip 输出查看器中产生类似这样的结果:
一切都很好,但如何将其放入 LaTeX 中?
我尝试过的主要方法是实用的,但很笨重:
- 我使用输出窗口旁边的 Datagrip 的“导出数据”功能将表复制到剪贴板,如下所示:
- 然后我将其粘贴到这个网站,Latex 表格生成器,然后输出一些 LaTeX 代码(在我告诉网站在表格单元格周围添加边框之后):
\begin{table}[]
\begin{tabular}{|l|l|}
\hline
ID & Sum of errors \\ \hline
\begin{tabular}[c]{@{}l@{}}a\\ b\end{tabular} & \begin{tabular}[c]{@{}l@{}}56\\ 12\end{tabular} \\ \hline
\end{tabular}
\end{table}
在我的文档中产生了一个很好的小结果:
所以就像我说的,这些都是功能性的,但由于我是一个熟练但最终还是新手的 SQL 和 LaTeX 用户,我想问问社区是否有更好或更快的方法。我认为将这些表输出为 CSV 格式可能会奏效,但 TeX 环境中与 CSV 相关的软件包的情况令人困惑。
(仅供参考:我在 StackOverflow 上发布了此查询的一个版本。希望能够尽可能广泛地传播。)
答案1
因为您使用 R,而 R 可以执行 SQL 查询,并且 R 可以生成 LateX 表,并且knitr
可以直接在 R noweb (.Rnw) 文件中的 Latex 源内制作表:
测试.Rnw:
\documentclass{article}
\begin{document}
<<test,results='asis',echo=FALSE>>=
xtable::xtable(head(sqldf::sqldf("SELECT * FROM iris")), caption="SQL query.")
@
\end{document}
注意:这可以在 Rstudio 中轻松编译(使用 pdflatex、xelatex 或 lualatex,随你便),但在 Overleaf 中无法工作,至少因为(a)sqldf
Overleaf 中未安装 R 包,并且(b)本站点中 LateX+R 文件的文件扩展名必须是.Rtex
,而不是.Rnw
。
我确信还有其他 R 方法可以连接到 SQL 数据库,也许其中一些可从 Overleaf 获得,但我还没有探索过这种方法。