[英]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.