Query

Query[operator1,operator2,]

表示一个可以应用到数据集 Dataset 对象的一个查询,其中,operatori 依次逐步进行更深一层的查询.

更多信息和选项

  • Query 可对任意矩形和分层数据进行复杂的筛选、重组和汇总操作,通常会返回更复杂的矩形或分层数据.
  • Query 可对 Dataset 对象进行操作,也可对由列表和关联组成的任意嵌套表达式进行操作.
  • Query 可被视为 Part 的推广,在遍历表达式或数据集的过程中进行计算.
  • operatori 可以是以下形式:
  • All,i,i;;j,"key",Key[]分部运算符
    Select[],MaximalBy[],筛选运算符
    Counts,Total,Mean,Max,汇总运算符
    Query[],{op1,op2,},子查询运算符
    Function[],f任意函数
  • Query[operator1,][expr] 中,operatoriexpr 依次逐步进行更深一层的查询,其任一操作可以是更深入expr 中,也可以是向外退出. 一般情况下,分部运算符和筛选运算符为深入运算符,汇总运算符、子查询运算符和任意函数为退出运算符. Query[][expr] 返回 expr.
  • 在后面的运算符应用到更深一层之前,深入运算符被应用到原始数据集相应的部分. 深入运算符的特点是在作用于某一层时,它们不会改变数据更深层次的结构. 这确保后面的运算符操作时,子表达式的结构和原始数据集的相应层次是一样的. 最简单的深入运算符是 All,它选取某个给定层的所有部分,因此不会改变该层数据的结构.
  • 在所有随后的运算符完成对深层数据的操作后,退出运算符被应用. 深入运算符对应于原始数据的层,而退出运算符对应于结果的层. 和深入运算符不同,退出运算符不必保持所操作数据的结构. 如果一个运算符没有被明确指定为深入运算符,假定其为退出运算符.
  • 在后面的运算符应用到更深一层之前,深入分部运算符指定某层中要选取哪些元素:
  • All随后的运算符作用于列表或关联的每个部分
    i;;j选取 ij 的部分元素,将随后的运算符作用于每个部分
    i只选取部分元素 i,将随后的运算符作用于这些部分
    "key",Key[key]取出关联 key 的值,将随后的运算符作用于这些值
    Keys取出关联的键,将随后的运算符作用于每个键
    Values取出关联的值,将随后的运算符作用于每个值
    {part1,part2,}取出指定部分,将随后的运算符作用于每个部分
  • 在后面的运算符应用到更深一层之前,深入筛选运算符规定怎样重组或筛选某层中的元素:
  • Select[test]只选取列表或关联中满足 test 的部分
    SelectFirst[test]选取满足 test 的第一部分元素
    KeySelect[test]选取关联中键满足 test 的部分
    MaximalBy[crit],MinimalBy[crit]选取使条件 crit 最小化或最大化的部分
    SortBy[crit]使各部分按 crit 排序
    KeySortBy[crit]给关联排序,使关联的键按 crit 排序
    DeleteDuplicatesBy[crit]crit 选取具有唯一性的部分元素
    DeleteMissing去掉头为 Missing 的元素
  • 退出运算符合并或汇总后面的运算符应用到更深一层产生的结果:
  • Total结果中所有数值的总和
    Min,Max给出结果中的最小和最大值
    Mean,Median,Quantile,给出结果的统计摘要信息
    Histogram,ListPlot,计算结果的绘图信息
    Merge[f]用函数 f 将结果中有共同键的关联归并在一起
    Catenate将列表或关联中的元素串接在一起
    Counts给出计算结果中数值出现的次数的关联
    CountsBy[crit]给出根据 crit 计算结果中数值出现的次数的关联
    CountDistinct给出结果中不同值的个数
    CountDistinctBy[crit]给出根据 crit 结果中不同值的个数
  • 在后面的运算符应用到更深一层之后,退出子查询运算符进行子查询操作:
  • Query[]对结果进行子查询
    {op1,op2,}对结果一次运用多个运算符,产生一个列表
    op1/* op2/* 在同一层运用 op1,然后运用 op2,依次类推
    <|key1op1,key2op2,|>对结果一次运用多个运算符,用给定键产生关联
    {key1op1,key2op2,}对结果中指定元素运用不同的运算符
  • 当一个或多个深入运算符和一个或多个退出运算符(例如:desc/*asc)组合在一起时,先运用深入运算符,接着其后跟随的运算符作用到更深层次的数据上,最后退出运算符将对结果进行操作.
  • 特殊深入运算符 GroupBy[spec] 会在它出现的层中引入一个新的关联,可以将其移除或加入到现存查询中,不会影响其它运算符的行为.
  • 在语法上 GroupBy["string"]GroupBy[Key["string"]]等效. SortByCountsByMaximalByMinimalByDeleteDuplicatesBy 也可运用类似的语法.
  • 可以给出下列选项:
  • FailureAction "Abort"怎样处理操作失败的运算符
    MissingBehavior Automatic怎样处理涉及 Missing 的操作
    PartBehavior Automatic怎样解决元素缺失问题
  • FailureAction 可能的值包括:
  • None忽略所有提示信息及失败操作
    "Abort"当遇到提示信息时终止整个查询(缺省)
    "Drop"丢弃发出信息的操作所产生的结果
    "Encapsulate"将发出信息的操作封装在 Failure 对象中
    "Replace"Missing["Failed"] 代替发出信息的操作产生的结果
  • 选项 MissingBehavior 规定了数值函数和其他函数应该怎样处理头为 Missing 的表达式. 可能的值包括:
  • NoneMissing 的一般处理方式
    Automatic调用针对 MeanTotal 等的特殊的处理规则
  • 选项 PartBehavior 规定了怎样处理涉及不存在的元素的运算符. 可能的值包括:
  • NonePart 的一般处理方式
    Automatic调用针对无效 i;;j,缺失 i 等的特殊的处理规则

范例

打开所有单元关闭所有单元

基本范例  (1)

创建表格式数据,对其进行查询:

取出几行数据:

取出指定行的数据:

从指定行取出指定元素:

取出指定列的数据:

从某列数据中取出指定部分:

从行和列数据中取出子集:

对指定列运用函数:

将一列数据分成几部分,并将剩下的查询应用于各部分:

对每行运用函数:

对每行和所有结果运用函数:

对每行的每个元素运用函数 f

分别对每列应用指定的运算符:

通过用指定运算符对每列数据进行计算创建新表格:

用同样的技巧对列进行重新命名:

基于某个标准选取指定行:

选取指定行后,取出某列的数据:

选取指定行后,从指定列中取出一个子集:

从满足条件的第一行中取出一个值:

根据指定标准对行进行排序:

取出使评分函数取得最大值的行:

根据标准删除有相同数据的行:

构建一个退出运算符和一个深入运算符,对行进行筛选后,对列的数值进行汇总:

Query 进行 Total 运算来完成同样的操作:

选项  (4)

FailureAction  (2)

创建样本数据:

设置 FailureActionNone 对结果不采取任何特殊操作:

设置 FailureAction->"Encapsulate" 将失败的结果封装在 Failure 对象中:

设置 FailureAction->"Replace" 用占位符替换失败的结果. 对于函数 Query,该占位符是一个 Missing 对象:

设置 FailureAction->"Drop" 会将失败的结果从最终表达式中删除:

设置 FailureAction->"Abort" 中止计算,返回一个 Failure 对象:

设置 FailureAction->{"Drop",f} 可用于在删除失败结果之前执行某种操作:

设置 FailureAction->{"Replace",f} 可指定用什么对失败函数进行替换:

MissingBehavior  (1)

缺省值 MissingBehavior->Automatic,在碰到 Missing 的情况时,对运算符运用特殊规则:

设置为 MissingBehavior->None,对所有运算符采用 Missing 的一般处理方式:

PartBehavior  (1)

缺省值 PartBehavior->Automatic 调用运算符的特殊处理方式以避免操作失败:

设置为 PartBehavior->None,则规定要使用 Part 的一般处理方式:

属性和关系  (1)

Query 是由 Dataset 支持的查询语言的运算符形式:

在被执行之前,Query 表达式被 编译为由 Wolfram Language 函数和运算符组成的一般指令. 用 Normal 可以查看 Query 的编译形式:

Wolfram Research (2014),Query,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Query.html.

文本

Wolfram Research (2014),Query,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Query.html.

CMS

Wolfram 语言. 2014. "Query." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Query.html.

APA

Wolfram 语言. (2014). Query. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Query.html 年

BibTeX

@misc{reference.wolfram_2024_query, author="Wolfram Research", title="{Query}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/Query.html}", note=[Accessed: 24-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_query, organization={Wolfram Research}, title={Query}, year={2014}, url={https://reference.wolfram.com/language/ref/Query.html}, note=[Accessed: 24-November-2024 ]}