首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:根据xml中的属性值计算不同记录的数量

SQL:根据xml中的属性值计算不同记录的数量
EN

Database Administration用户
提问于 2023-05-22 15:19:53
回答 1查看 21关注 0票数 0

假设我有以下xml

代码语言:javascript
复制
<Operations>
  <Info Id="2265" cId="2" aId="5" />
  <Info Id="2266" cId="2" aId="5" />
  <Info Id="2266" cId="2" aId="6" />
  <Info Id="2267" cId="2" aId="5" />
  <Info Id="2267" cId="2" aId="6" />
</Operations>

在不通过分配额外空间将值插入表的情况下,我希望计算属性cIdaId上具有不同值的节点数。

目前,我是通过将相同的数据插入到表中来实现的,但是数据非常大,在执行过程中占用了大量的临时空间。

有办法吗?

上面的预期输出为3

EN

回答 1

Database Administration用户

发布于 2023-05-23 15:41:22

不要强迫它进入RAM,让它根据需要使用磁盘。在桌子上有吗?还是只使用XML?

可能有一个LOAD DATA语句将其从XML转换为这样定义的表:

代码语言:javascript
复制
CREATE TABLE Operations (
    id INT NOT NULL AUTO_INCREMENT,
    cid TINYINT UNSIGNED NOT NULL,
    aid TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY(id)
) ENGINE=InnoDB;

该表可能比您的300 be要小。如果需要的话,让它溢出到磁盘。(不管怎么说,你几乎没有什么控制权。)身份证能有多大?我选择了最小的数据类型,但假设数字在0到255之间。如果需要,选择更大的数据类型。

那就去做

代码语言:javascript
复制
 SELECT COUNT(DISTINCT cid, aid)
     FROM Operations;

这似乎是“属性cId和aId上具有不同值的节点数”,但看起来答案是2,即2,5和2,6。如果Info_id与计数相关,请解释一下。(这可能需要将其包括在LOAD DATA中。

如果要从电子表格导出数据,..。好吧,我认为XML是一种糟糕的方法。作为一种RDBMS友好格式,使用CSV文件更容易,速度更快。在此之后,3个SQL语句实现了目标:创建表、加载数据、选择。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/327382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档