我可以生成一个地图,显示特定行在 SQLite 中的特定组中吗?
Can I generate a map that shows a particular row was in a particular group in SQLite?
假设我有以下数据:
+--------+-------+
| Group | Data |
+--------+-------+
| 1 | row 1 |
| 1 | row 2 |
| 1 | row 3 |
| 20 | row 1 |
| 20 | row 3 |
| 10 | row 1 |
| 10 | row A |
| 10 | row 2 |
| 10 | row 3 |
+--------+-------+
是否可以绘制一张地图,显示哪些组有哪些行?组可能不会传染,因此可以将它们放在单独的 table 中,并使用行索引代替字符串索引。像这样:
+-------+
| Group |
+-------+
| 1 |
| 20 |
| 10 |
+-------+
+-------+----------------+
| Data | Found in group |
+-------+----------------+
| row 1 | 111 |
| row A | 1 |
| row 2 | 1 1 |
| row 3 | 111 |
+-------+----------------+
其中第一个字符代表第1组,第2个字符代表第20组,第3个字符代表第10组。
组行的顺序并不重要,只要我可以参考哪一行与哪个字符对应即可。
我问这个是因为我看到了这个 crazy example in the documentation generating a fractal,但我不太明白。
这可行吗?
SELECT Data, group_concat("Group") AS "Found in group"
FROM yourtable
GROUP BY Data
将为您提供 CSV 组列表。
要找到缺失值,首先要准备一个包含所有可能组合的数据集。您可以使用 CROSS JOIN
.
来实现
获得该数据集后,将其与实际数据集进行比较。
考虑到 Order by 是在 Grp 列中完成的,您可以使用下面的方法实现它。
SELECT
a.Data,group_concat(case when base.Grp is null then "." else "1" end,'') as Found_In_Group
,group_concat(b.Grp) as Group_Order
FROM
(SELECT Data FROM yourtable Group By Data)a
CROSS JOIN
(SELECT Grp FROM yourtable Group By Grp Order by Grp)b
LEFT JOIN yourtable base
ON b.Grp=base.Grp
AND a.Data=base.Data
GROUP BY a.Data
注意:考虑 .
而不是空白,以便更好地显示缺失组。
Data
Found_In_Group
Group_Order
row 1
111
1,10,20
row 2
11.
1,10,20
row 3
111
1,10,20
row A
.1.
1,10,20
演示:Try here
假设我有以下数据:
+--------+-------+
| Group | Data |
+--------+-------+
| 1 | row 1 |
| 1 | row 2 |
| 1 | row 3 |
| 20 | row 1 |
| 20 | row 3 |
| 10 | row 1 |
| 10 | row A |
| 10 | row 2 |
| 10 | row 3 |
+--------+-------+
是否可以绘制一张地图,显示哪些组有哪些行?组可能不会传染,因此可以将它们放在单独的 table 中,并使用行索引代替字符串索引。像这样:
+-------+
| Group |
+-------+
| 1 |
| 20 |
| 10 |
+-------+
+-------+----------------+
| Data | Found in group |
+-------+----------------+
| row 1 | 111 |
| row A | 1 |
| row 2 | 1 1 |
| row 3 | 111 |
+-------+----------------+
其中第一个字符代表第1组,第2个字符代表第20组,第3个字符代表第10组。
组行的顺序并不重要,只要我可以参考哪一行与哪个字符对应即可。
我问这个是因为我看到了这个 crazy example in the documentation generating a fractal,但我不太明白。
这可行吗?
SELECT Data, group_concat("Group") AS "Found in group"
FROM yourtable
GROUP BY Data
将为您提供 CSV 组列表。
要找到缺失值,首先要准备一个包含所有可能组合的数据集。您可以使用 CROSS JOIN
.
获得该数据集后,将其与实际数据集进行比较。
考虑到 Order by 是在 Grp 列中完成的,您可以使用下面的方法实现它。
SELECT
a.Data,group_concat(case when base.Grp is null then "." else "1" end,'') as Found_In_Group
,group_concat(b.Grp) as Group_Order
FROM
(SELECT Data FROM yourtable Group By Data)a
CROSS JOIN
(SELECT Grp FROM yourtable Group By Grp Order by Grp)b
LEFT JOIN yourtable base
ON b.Grp=base.Grp
AND a.Data=base.Data
GROUP BY a.Data
注意:考虑 .
而不是空白,以便更好地显示缺失组。
Data | Found_In_Group | Group_Order |
---|---|---|
row 1 | 111 | 1,10,20 |
row 2 | 11. | 1,10,20 |
row 3 | 111 | 1,10,20 |
row A | .1. | 1,10,20 |
演示:Try here