[英]Merge not-blank result fields by sql query
讓我知道我有一個復雜的查詢,從大量的表中獲取數據。
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
子句並按照我在簡化示例中所做的相同方式選擇/分組結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.