gpt4 book ai didi

mysql - 通过sql查询合并非空结果字段

转载 作者:可可西里 更新时间:2023-11-01 08:06:03 24 4
gpt4 key购买 nike

假设我有一个复杂的查询,它从大量表中获取数据。

    SELECT
DISTINCT
table1.hash,
table2.field1,
table3.field1,
table4.field1,
...
...
...
FROM table1
inner JOIN table2
ON table1.hash=device_model.hash
and table1.date = table2.date
and table1.time = table2.time

...
...
...
inner JOIN table_n-1
ON table1.hash=table_n-1.hash
and table1.date = table_n-1.date
and table1.time = table_n-1.time
left JOIN table_n
ON table1.hash=table_n.hash
and table1.date = table_n.date
and table1.time = table_n.time
...
...
...
ORDER BY table1.date

感谢“DISTINCT”运算符,我得到了像这样的三行结果

+---------+----------+------------+
|value1 |Null | value3 |
+---------+----------+------------+
|value1 |Null | Null |
+---------+----------+------------+
|value1 |value2 | null |
+---------+----------+------------+
|value1 |Null | value3 |
+---------+----------+------------+

所以我在每一行中至少有一个 Null。如何将选择结果合并到一行中以获得所有数据?我希望看到类似这样的内容:

+---------+----------+------------+ 
|value1 |value2 | value3 |
+---------+----------+------------+

显然,第一行的 value3 等于最后一行的 value3。因此,结果行仅因 Null 而不同。

最佳答案

您要求的是分组和使用 max 聚合函数的问题。假设您有这个表(您的查询很大,无法粘贴到这里 :):

+---------+---------+----------+------------+
|hash |field1 |field2 | field3 |
+---------+---------+----------+------------+
|hash01 |value1 |Null | value3 |
|hash01 |value1 |Null | Null |
|hash01 |value1 |value2 | null |
|hash01 |value1 |Null | value3 |
+---------+---------+----------+------------+

您可以按散列列进行分组,并对其余列应用 max。这样,value2 将优于 field2 中的 null,并且 value3 将再次优于 field3 中的 null。在此示例中,同一个散列有 2 个 value3。所以 max 函数仍然有效。如果同一列中的同一散列有 2 个不同的值,那么您应该明确要对它们执行的操作,因为在结果中只能选择一个(根据您的示例)。

所以对上述结果的查询类似于:

select hash, max(field1) as field1, max(field2) as field2, max(field3) as field3
group by hash

将此应用于您的示例,很可能意味着您必须删除 distinct 子句并按照我在简化示例中所做的相同方式选择/分组结果。

关于mysql - 通过sql查询合并非空结果字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636558/

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