首页 > 解决方案 > 不使用 Group by 的替代 xquery

问题描述

以下 XML 示例显示类型为“主”的数据记录,这些记录链接到类型为“系列”的 0..N 个内容。我想检测具有相同标题()属性的大师的现有系列记录的数量。

<?xml version="1.0" encoding="UTF-8"?>
<program_file fechaCreacion="20180919184224">
    <version>1.0</version>
    <programs>
        <program id_programa="1">
          <tipo_programa>Master</tipo_programa>
          <titulo >tit1</titulo>
          <año>2018</año>
        </program>
        <program id_programa="2">
          <tipo_programa>Master</tipo_programa>
          <titulo >tit1</titulo>
          <año>2018</año>
        </program>
           <program id_programa="3">
          <tipo_programa>Master</tipo_programa>
          <titulo >tit2</titulo>
          <año>2018</año>
        </program>
        <program id_programa="5">
          <id_serie>1</id_serie>
          <tipo_programa>Series</tipo_programa>
          <episodio>8</episodio>
          <temporada>1</temporada>
          <titulo >tit1</titulo>
          <año>2018</año>
        </program>
        <program id_programa="6">
          <id_serie>2</id_serie>
          <tipo_programa>Series</tipo_programa>
          <episodio>8</episodio>
          <temporada>1</temporada>
          <titulo >tit1</titulo>
          <año>2018</año>
        </program>
        <program id_programa="7">
          <id_serie>3</id_serie>
          <tipo_programa>Series</tipo_programa>
          <episodio>8</episodio>
          <temporada>1</temporada>
          <titulo >tit2</titulo>
          <año>2018</año>
        </program>      
    </programs>
</program_file>

通过这个例子,我希望以表格格式获得的是: 在此处输入图像描述

我设法使用 Group by 进行了一个查询,该查询为我提供了正确的结果(使用 BaseX):

let $dup_masters := doc("C:/Users/fgarcia/Documents/Optiva/Orange/programs_sample.xml")/program_file/programs
    return
    <distinct-names> {
      for $dups in $dup_masters/program 
        order by $dups/titulo
        group by $title := $dups/titulo
        return
          if(count(distinct-values($dups[tipo_programa="Master"]/@id_programa)) > 1) then
            element {"Master"}
                    { 
                      attribute {"title"} {$title},
                      for $id in distinct-values($dups[tipo_programa="Master"]/@id_programa) 
                      return ( 
                        <td>{$id}</td>, 
                        <td>{count($dups[id_serie=($id)])}</td>
                      )      
                    }
          else ()  
      }</distinct-names>

问题是,当我将此代码移至 Exist-db 时,我没有得到任何结果,我想知道这是否与存在的 Group By 的实现有关。欢迎任何有关如何以不同方式解决此问题的想法/提示!

标签: xquery

解决方案


推荐阅读