我面臨一個棘手的查詢(顯然是我的水平^^),我解釋了我的問題:我有一個帶有服務名稱的列 A 和一個帶有這些服務狀態的 B 列。我在多個主機上部署了相同的服務,但目前具有不同的狀態。這是我的資料庫示例
| 服務 | 狀態 |
|---|---|
| 服務A | 好的 |
| 服務B | 挪威克朗 |
| 服務A | 挪威克朗 |
| 服務B | 挪威克朗 |
我正在尋找的是僅顯示與此服務相關的所有行均為 NOK 的服務,如果一個 serviceX 處于 OK 狀態,我想將其從輸出中排除。在我的示例中,我想只檢索 ServiceB,因為在整個表中沒有任何 ServiceB 處于另一個狀態的行。
謝謝你的幫助
使用:SELECT service,state,count(*) FROM table GROUP BY service,state
我能夠為每個不同的值檢索一個計數器
| 服務 | 狀態 | 數數 |
|---|---|---|
| 服務A | 好的 | 1 |
| 服務B | 挪威克朗 | 2 |
| 服務A | 挪威克朗 | 1 |
使用“WHERE state != 'NOK'”條件在 OK 狀態下丟棄服務非常容易,但它會錯誤地顯示結果,因為 serviceA 會出現,而一行不是“NOK”。
uj5u.com熱心網友回復:
嘗試這個:
SELECT service, state, count(*) FROM table WHERE state = 'NOK' GROUP BY service, state;
uj5u.com熱心網友回復:
您可以為此使用子查詢:
“選擇所有不屬于服務具有正常狀態的集合的不同服務”
select distinct Service
from t
where Service not in (
select Service
from t
where state='OK'
);
uj5u.com熱心網友回復:
有不同的方法可以做到這一點,在我看來,最簡單的方法之一是使用子查詢。您想要所有主機都NOK相同的服務,就等于說您想要沒有主機的服務OK,對嗎?這更容易找到:至少有一項服務的所有服務OK:
SELECT DISTINCT service
FROM services
WHERE state = 'OK'
這些是您不想要的服務,因此要獲得您想要的服務(其余),您只需選擇該查詢未回傳的所有服務:
SELECT DISTINCT service from services where service not in (
SELECT DISTINCT service
FROM services
WHERE state = 'OK' )
SQL小提琴:http ://sqlfiddle.com/#!9/6c452a/9/0
希望有幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529569.html
標籤:mysql玛丽亚数据库
下一篇:更改表外鍵
