Mysql

SQL:連接 3 個表以生成報告儀表板

  • July 14, 2022

我正在嘗試加入 3 個不同的表,這些表將我的測試執行結果保存為“PASS”、“FAIL”和“SKIP”。這 3 個表中有 2 個共同屬性,我需要在此基礎上對我的結果進行組合,即“BUILD_NUMBER”和“COMPONENT”。

嘗試了幾種方法,但沒有得到想要的結果。

在此處輸入圖像描述

範例查詢:

select test_execution.COMPONENT, test_execution.BUILD_NUMBER, 
count(test_execution.TEST_STATUS) as PASS from (test_execution 
INNER JOIN test_execution_fail ON
test_execution.BUILD_NUMBER = test_execution_fail.BUILD_NUMBER) group by 
COMPONENT,BUILD_NUMBER;

我的表格如下所示:

CREATE TABLE test_execution_skip (
BUILD_NUMBER int,
TEST_NAME varchar(255),
TEST_CLASS varchar(255),
COMPONENT varchar(255),
TEST_STATUS varchar(255)
);

其他兩個表完全相同,名稱為 test_execution 和 test_execution_fail。

test_execution 表保存 3 條記錄(所有通過值),test_execution_fail 表保存 2 條記錄(所有失敗值),test_execution_skip 表保存 1 條記錄(跳過值)。

我想填充將顯示 BUILD_NUMBER、COMPONENT、TOTAL、PASS、FAIL、SKIP 的數據作為記錄,其中 TOTAL、PASS、FAIL 和 SKIP 將顯示各自的計數。

任何幫助在這裡表示讚賞。

在這裡,我們看到了“每事物表”數據模型的另一個實例,並且我們再次看到了它如何導致的問題多於解決的問題。

使用一個表 - test_execution- 並為其添加一result列。

使用正確的索引,您應該沒有性能問題。

基於這張表,您的查詢變為

$$ almost $$瑣碎的:

select 
 build_number
, component 
, sum( case when result = 'PASS' then 1 else 0 end ) passes 
, sum( case when result = 'FAIL' then 1 else 0 end ) fails 
, sum( case when result = 'SKIP' then 1 else 0 end ) skips 
from text_execution 
group by 
 build_number
, component 
order by 
 build_number
, component 
; 

引用自:https://dba.stackexchange.com/questions/314396