我不确定如何将单个SQLite查询组合在一起以实现以下目的。我可以零零碎碎地工作,但似乎无法将其全部融合为一个。
我有一个看起来像这样的表(实际数据集为几GB):
| ID | ColumnA | ColumnB | ColumnC | ColumnD |
| 1 | 21 | 34 | 10 | 0.12654 |
| 2 | 21 | 34 | 20 | 0.25478 |
| 3 | 21 | 46 | 10 | 0.43564 |
| 4 | 21 | 46 | 20 | 1.02487 |
| 5 | 34 | 21 | 10 | 0.01476 |
| 6 | 34 | 21 | 20 | 0.87265 |
| 7 | 34 | 46 | 10 | 0.46478 |
| 8 | 34 | 46 | 20 | 0.13665 |
| 9 | 46 | 21 | 10 | 0.04189 |
| 10 | 46 | 21 | 20 | 0.91754 |
| 11 | 46 | 34 | 10 | 0.73688 |
| 12 | 46 | 34 | 20 | 0.24299 |
这些数据是由嵌套do-loop生成的,用于我正在进行的一些模拟。
从此表中,我基本上需要提取一个如下表,以便绘制颜色/热图。
| ID | ColumnA | ColumnB | ColumnC | ColumnD |
| 1 | 21 | 34 | 10 | 0.12654 |
| 3 | 21 | 46 | 10 | 0.43564 |
| 5 | 34 | 21 | 10 | 0.01476 |
| 8 | 34 | 46 | 20 | 0.13665 |
| 9 | 46 | 21 | 10 | 0.04189 |
| 12 | 46 | 34 | 20 | 0.24299 |
因此,这将使我能够使用2D数组基于ColumnD值制作色彩图(对角线应设置为零,因为对于给定的行,ColumnA和ColumnB的值永远不相等;因此不存在对角线的数据在数据库中):
| 21 | 34 | 46
------------------
21 | 0 | |
------------------
34 | | 0 |
------------------
46 | | | 0
我的问题基本上是如何设置一个查询以汇总进入2D数组的所有数据以生成颜色图。
重要的是要注意,ColumnA和ColumnB基本上是由同一组整数填充的。我可以使用DISTINCT获得唯一的整数值列表。我发现了一些关于在多列中选择DISTINCT的SO线程,但是这些示例都没有显示如何使用聚合器来选择其他列中的值。在这种情况下,我想使用min()为ColumnA和ColumnB中的每个ID对选择ColumnD中的最小值。在单列上选择DISTINCT不起作用,因为这是唯一的坐标对(ColumnA,ColumnB)。
任何帮助将不胜感激!
最佳答案
对我来说,似乎您想要对ColumnD
和ColumnA
成对的ColumnB
最小值。如果您不关心id
或ColumnC
,则简单的group by
就足够了:
select ColumnA, ColumnB, min(ColumnD)
from table t
group by ColumnA, ColumnB;
如果确实需要该行中的所有值,则可以
join
返回以获取它们:select t.*
from table t join
(select ColumnA, ColumnB, min(ColumnD) as ColumnD
from table t
group by ColumnA, ColumnB
) tt
on t.ColumnA = tt.ColumnA and t.ColumnB = tt.ColumnB and
t.ColumnD = tt.ColumnD;
这假定
ColumnD
永远不会与ColumnA
和ColumnB
中的值重复。关于python - 跨多个列的SQLite SELECT查询,这些列具有重复的分组行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28279996/