假设我有以下数据:
+--------+-------+
| 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 |
+--------+-------+
是否可以绘制一张地图,显示哪些组有哪些行?组可能不具有传染性,因此可以将它们放入单独的表中,并使用行索引作为字符串索引。像这样的东西:
+-------+
| 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 组。
组行的顺序并不重要,只要我可以参考哪一行与哪个字符一起使用。
我之所以这么问,是因为我在文档中看到了这个疯狂的例子,生成了一个 fractal,但我无法完全理解它。
这是可行的吗?
要找到缺失值,首先要准备一个具有所有可能组合的数据集。您可以使用CROSS JOIN
.
获得该 DataSet 后,将其与实际的 DataSet 进行比较。
考虑到 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
注意:考虑.
而不是空白以获得更好的可见性来表示缺失的组。
数据 | Found_In_Group | Group_Order |
---|---|---|
第 1 行 | 111 | 1,10,20 |
第 2 行 | 11. | 1,10,20 |
第 3 行 | 111 | 1,10,20 |
A排 | .1. | 1,10,20 |
演示:在这里试试
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句