簡體   English   中英

通過sql查詢合並非空白結果字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM