Python SQLite选择跨多个列的查询,其中包含重复的分组行

Python SQLite选择跨多个列的查询,其中包含重复的分组行,python,sql,arrays,sqlite,Python,Sql,Arrays,Sqlite,我不完全确定如何组合一个SQLite查询来实现以下功能。我可以把一些零碎的东西做好,但似乎不能把它们融合到一个整体中 我有一个如下表(实际数据集为几GB): 这些数据是由我正在进行的一些模拟的嵌套do循环生成的 从这个表中,我需要提取一个如下所示的表,以便绘制颜色/热图 | ID | ColumnA | ColumnB | ColumnC | ColumnD | | 1 | 21 | 34 | 10 | 0.12654 | | 3 | 21 |

我不完全确定如何组合一个SQLite查询来实现以下功能。我可以把一些零碎的东西做好,但似乎不能把它们融合到一个整体中

我有一个如下表(实际数据集为几GB):

这些数据是由我正在进行的一些模拟的嵌套do循环生成的

从这个表中,我需要提取一个如下所示的表,以便绘制颜色/热图

| 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值创建一个colormap(对角线应设置为零,因为对于给定行ColumnA和ColumnB的值永远不相等;因此数据库中不存在对角线的数据):

我的问题基本上是如何设置一个查询来聚合进入2D数组的所有数据以生成colormap

需要注意的是,ColumnA和ColumnB基本上由相同的整数集填充。我可以使用DISTINCT获得整数值的唯一列表。我发现了一些关于跨多个列选择DISTINCT的线程,但是没有一个示例显示如何使用聚合器在其他列中选择值。在本例中,我想使用min()为ColumnA和ColumnB中的每对ID选择ColumnD中的最小值。在单个列上选择DISTINCT不起作用,因为坐标对(ColumnA,ColumnB)是DISTINCT的


任何帮助都将不胜感激

您应该能够使用GROUP BY子句对要整理行并对其执行聚合计算的字段进行分组:

SELECT ColumnA, ColumnB, Min(ColumnC), Min(ColumnD)
FROM Table1
GROUP BY ColumnA, ColumnB

在我看来,对于
ColumnA
ColumnB
对,似乎需要
ColumnD
的最小值。如果您不关心
id
ColumnC
,只需简单的
分组即可:

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;

这假设
ColumnA
ColumnB
中的值永远不会重复
ColumnD

不清楚如何从原始表转换到提取表。这两个看起来一模一样。你的标准是什么?对不起,也许这在课文中丢失了。标准是为每个(ColumnA,ColumnB)对选择ColumnD的最小值。这不适用于所需结果中的最后一个示例。这是正确的。抱歉,我没有详细查看预期结果。太好了!我看到了
分组的功能。似乎工作正常
ColumnD
不应重复,因为我将其存储到浮点精度,并且两次模拟不太可能产生完全相同的值。万一发生冲突,
min
是否会抛出错误?@kartikkumar。一点也不。您将获得输出中具有最小值的所有行。太好了!这很有效,我想我可以使用DISTINCT来确保只拾取一行。@Karikkumar。您可以尝试一下,但这在大型结果集上有相当大的开销。因此,如果
DISTINCT
的性能有问题,您可能想问另一个关于性能的问题。我面临的更大的问题是将从数据库中获取的表拆分为二维网格,以便绘制热图。试图让它与熊猫一起工作,但它扰乱了可乐和可乐元素的顺序。
select ColumnA, ColumnB, min(ColumnD)
from table t
group by ColumnA, ColumnB;
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;