簡體   English   中英

SQL查詢以比較位於同一列中但由兩組不同的查詢返回的兩個值

[英]SQL Query to compare two values which are in the same column but returned by two different set of queries

我有一張類似於以下所示的表格。

-----------------------------
JOB ID | parameter | result |
-----------------------------
1       | xyz      | 10     |
1       | abc      | 15     |
2       | xyz      | 12     |
2       | abc      | 8      |
2       | mno      | 20     |
-----------------------------

我想要如下所示的結果。

 parameter | result 1 | result 2 |
----------------------------------
   xyz     |  10      |  12      |
   mno     |  NULL    |  20      |
   abc     |  15      |  8       |
----------------------------------

我的目標是擁有一個表,該表可以比較兩個不同作業的結果值。 它可以是兩個或多個工作。

您想要模擬數據透視表,因為mysql沒有數據透視表。

select 
    param, 
    max(case when id = 1 then res else null end) as 'result 1',
    max(case when id = 2 then res else null end) as 'result 2'
from table
group by param

SQL玩

在Postgres中,您可以使用以下方法:

select parameter, (array_agg(result))[1], (array_agg(result))[2] from my_table group by parameter;

這個想法是:將給定參數的所有結果聚合到一個結果數組中,然后從這些數組中獲取單個元素。

我認為您可以通過使用GROUP_CONCAT()在MySQL中實現類似的功能,盡管它返回的是字符串而不是數組,因此您無法輕松地對其進行索引。 但是之后您可以按逗號分開。

如果使用的是MySQL,則不需要“外部聯接”就可以使用左右聯接:

select t1.parameter, t1.result 'Result 1', t2.result 'Result 2' from
table as t1 left join table as t2
on t1.parameter=t2.parameter
where t1.'JOB ID' = 1 and t2.'JOB ID' = 2
union
select t1.parameter, t1.result 'Result 1', t2.result 'Result 2' from
table as t1 right join table as t2
on t1.parameter=t2.parameter
where t1.'JOB ID' = 1 and t2.'JOB ID' = 2

如果具有完全外部聯接的SQL將使其更容易:

select t1.parameter, t1.result 'Result 1', t2.result 'Result 2' from
table as t1 outer join table as t2
on t1.parameter=t2.parameter
where t1.'JOB ID' = 1 and t2.'JOB ID' = 2
select q1.parameter, q2.result as r1, q3.result as r2
  from 
    (select distinct parameter from temp2) q1
    left join (select parameter, result from temp2 where job_id = 1) q2
      on q1.parameter = q2.parameter
    left join (select parameter, result from temp2 where job_id = 2) q3
      on q1.parameter = q3.parameter;

它可以工作,但是效率不高。 不過,由於我正在召集您,您正在嘗試解決比所介紹的問題更復雜的問題,因此這可能有助於形成您的一般解決方案。

在我這樣做的時候,這是一個稍微干凈的解決方案:

select distinct q1.parameter, q2.result as r1, q3.result as r2
  from 
    temp2 q1
    left join (select parameter, result from temp2 where job_id = 1) q2
      on q1.parameter = q2.parameter
    left join (select parameter, result from temp2 where job_id = 2) q3
      on q1.parameter = q3.parameter;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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