gpt4 book ai didi

Mysql根据列id上的列内容创建新行

转载 作者:行者123 更新时间:2023-11-29 09:48:20 24 4
gpt4 key购买 nike

抱歉,我无法清楚地解释标题。我有一个表,其中包含诸如

之类的行
    qid     |     content
--------------------
1 name1
2 surname1
3 feature1
1 name2
2 surname2
3 feature2
1 name3
2 surname3
3 feature3
4 x3
1 name4
2 surname4
3 feature4

我想创建一个与 qids 相关的 sql 查询来创建下表

    column1   |  column2   |  column3   |   column4
-----------------------------------------------
name1 surname1 feature1 NULL
name2 surname2 feature2 NULL
name3 surname3 feature3 x3
name4 surname4 feature4 NULL

对于 qid 4 来说 NULL 并不重要。

有人可以帮我吗?

最佳答案

您可以使用MySQL variablesIf选择行时的条件并根据 qid 值进行选择。

  • 如果 qid 小于特定列所需的值,我们将打印一个空值,否则我们将其分配给一个变量。我们为下一行携带前一列的值,这是使它们达到组合状态所必需的。

  • 如果我们发现下一组行的 qid 被重置,我们会将变量重新分配为空值。

  • 最后,我们按 column1 进行分组,并采用每列的 max() 来为 的每个值提供按字典顺序排列的最大值第 1 列。这还会过滤掉直到第 4th 列才完全形成的重复行。

  • 请注意,这是在行按连续属于彼此的顺序的假设下工作的,这意味着 surname1 不能出现在 10 行之后name1 行。

SQL:

select max(column1),max(column2),max(column3),max(column4)
from ( select if(qid = 1,@column1 := content,@column1) as column1,
if(qid = 2,@column2 := content,if(qid < 2,@column2 := '',@column2)) as column2,
if(qid = 3,@column3 := content,if(qid < 3,@column3 := '',@column3)) as column3,
if(qid = 4,@column4 := content,if(qid < 4,@column4 := '',@column4)) as column4
from test , (select @column1 := '',@column2 := '',@column3 := '',@column4 := '') init_variables) derived
group by column1;

演示: https://www.db-fiddle.com/f/wqdRkhF5uWGDCweZX4w8rS/0

关于Mysql根据列id上的列内容创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com