Mysql
SQL:連接 3 個表以生成報告儀表板
我正在嘗試加入 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 ;