![](/img/trans.png)
[英]how to check if a value already exist in db, and if so how to get the id of that row? android sql
[英]How to check if all instances of a DB row are the same and if so count + 1 in SQL?
我有以下 SQLite 數據庫表:
app | vendor | active
---------------------
123 | AGX | 1
123 | OTMA | 0
123 | PEI | 0
255 | IYU | 0
255 | MAG | 0
255 | MEI | 0
675 | IUU | 0
675 | AGU | 0
675 | O3I | 0
我需要能夠運行查詢以找出這些應用程序,哪些沒有活躍的供應商。
在上面的示例中, app 255
和app 675
沒有活動供應商 (0),因此我的查詢返回應該是2
。
到目前為止,我只能運行查詢來獲取“假”的行數,但不能獲取所有實例中為假的應用程序的數量:
SELECT COUNT(*) FROM app_vendor WHERE active = 0
總結:如果單個應用程序的所有行都為“假”,則應將計數加 1。
此查詢將為您提供沒有活躍供應商的應用程序列表:
SELECT app
FROM app_vendor
GROUP BY app
HAVING SUM(CASE WHEN active = true THEN 1 ELSE 0 END) = 0
要計算記錄,您可以將其包裝在子查詢中:
SELECT COUNT(*) FROM (
SELECT app
FROM app_vendor
GROUP BY app
HAVING SUM(CASE WHEN active = true THEN 1 ELSE 0 END) = 0
)
SELECT COUNT(*)
FROM (
SELECT app, COUNT(*)
FROM demo
GROUP BY app
HAVING MAX(active) = 0
)
所以基本上你通過應用程序創建供應商組,然后檢查組中的最大值是否為 false(這意味着 true 不存在)。
確實應該有更優雅的方式。
大概,您有一個app
表,每個app
一行。 我建議使用這個:
select a.*
from app a
where not exists (select 1
from app_vendor av
where av.app = a.app and av.active = 1
);
這種方法與僅使用app_vendor
表本身相比有兩個優點:
您需要聚合和COUNT()
window function:
SELECT DISTINCT COUNT(*) OVER() AS counter
FROM app_vendor
GROUP BY app
HAVING MAX(active) = 0
請參閱演示。
結果:
櫃台 |
---|
2 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.