我已经在Postgres中创建了一个包含XML列的表,并且希望使用子句分组依据。 使用方法。
我已经在Postgres中创建了一个包含XML列的表:
book_id | interger
bookinfo|xml
我插入了XML:
我想在查询中使用GROUP BY子句,以显示按性别(男性,女性)写的书数。
答案 0 :(得分:0)
欢迎来到。
我建议您首先使用XPATH
提取所需的信息,然后将其放在额外的列中,或者使用CTE
(又名WITH子句)来完成这项工作。后者可以按如下方式完成:
考虑您的表结构和以下数据:
CREATE TABLE t (book_id INT,bookinfo XML);
INSERT INTO t VALUES
(1,'<information><sexe>male</sexe><age>60</age></information>'),
(2,'<information><sexe>male</sexe><age>50</age></information>'),
(3,'<information><sexe>female</sexe><age>42</age></information>'),
(4,'<information><sexe>male</sexe><age>50</age></information>');
..执行以下查询:
WITH j AS (
SELECT
(XPATH('/information/sexe/text()',bookinfo))[1]::TEXT AS sexe,
(XPATH('/information/age/text()',bookinfo))[1]::TEXT AS age
FROM t)
SELECT j.age,j.sexe,COUNT(*) AS qt FROM j
GROUP BY age,sexe
ORDER BY qt DESC;
age | sexe | qt
-----+--------+----
50 | male | 2
42 | female | 1
60 | male | 1
(3 Zeilen)
根据表的大小,CTE可能会非常慢。如果是这样,请考虑解析数据并将其存储在额外的列中。