在 SQLite 中组合两列的巧妙方法?

Posted

技术标签:

【中文标题】在 SQLite 中组合两列的巧妙方法?【英文标题】:Clever way of combining two columns in SQLite? 【发布时间】:2016-04-19 11:32:32 【问题描述】:

如果这像代码高尔夫一样,我很抱歉,但我试图避免从数据库中获取数据,在应用程序代码中处理需要对数据集进行慢循环的事情,其中​​有索引可以帮助分组。

有没有办法从这样的数据集中获取:

sqlite> create table tst  (id INTEGER, label TEXT, variable TEXT, value FLOAT);
sqlite> insert into tst values (1,"label1","variable 1",1.2);
sqlite> insert into tst values (1,"label2","variable 2",2.2);
sqlite> insert into tst values (1,"label3","variable 3",3.2);
sqlite> select * from tst;
id          label       variable    value     
----------  ----------  ----------  ----------
1           label1      variable 1  1.2       
1           label2      variable 2  2.2       
1           label3      variable 3  3.2  

这样返回(输出列的名称由variablelabel 列内容的内容构成):

sqlite> <magic query here> 
id          label1_variable1   label2_variable2    label3_variable3     
----------  ----------         ----------          ----------
1           1.2                2.2                 3.2       

也就是说,是宽格式而不是长格式?

请提供建议,或者通过证明这是不可能的来帮助我。

【问题讨论】:

【参考方案1】:

您可以使用透视查询来实现这一点:

SELECT id,
    SUM(CASE WHEN label = 'label1' THEN value ELSE 0 END) AS 'label1_variable1',
    SUM(CASE WHEN label = 'label2' THEN value ELSE 0 END) AS 'label2_variable2',
    SUM(CASE WHEN label = 'label3' THEN value ELSE 0 END) AS 'label3_variable3'
FROM tst
GROUP BY id

您不能在 SQLite 中使用一组未知的列执行数据透视查询,因为这样做需要动态 SQL。作为用户@CL。在他下面的评论中提到,模拟动态 SQL 的一种方法是首先执行 SELECT DISTINCT label FROM tst 以获取所有列的集合,然后执行类似于我上面给出的枢轴查询。您必须从您的应用层以编程方式构建数据透视查询。

【讨论】:

是的,抱歉,我的问题并不清楚。我需要在制定查询时不知道要创建的列的名称。因此,如果label 中还有一个“label4”,variable 中还有一个“variable4”,那么我也会在输出中得到一个 label4_variable4 列。 你需要动态SQL来实现这个,我不知道SQLite是否支持动态SQL。 它没有; SQLite 是一个嵌入式数据库,旨在与“真正的”编程语言一起使用。 @CL。那我们能不能断定他不能达到他想要的? 这取决于。是否首先执行SELECT DISTINCT label 才能将数据透视查询计数为“循环数据”?

以上是关于在 SQLite 中组合两列的巧妙方法?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫将一列映射到两列的组合

在 Postgresql 中,对两列的组合强制唯一

在 Postgresql 中,对两列的组合强制唯一

在excel中查找两列的组合,一列中有一个条件

来自两列的 SQLITE group_concat 配对值

如何在 Pandas 中获得两列的组合? [复制]