我有一个 MS SQL 数据库和一个 postgres 数据库。任何一种解决方案都可以,因为我可以翻译它。
我们有一个customer_phone表格,其中相关的列是:
id, customer_id, phone, is_bad
Run Code Online (Sandbox Code Playgroud)
我需要做的是customer_id从这张表中选择所有只有is_bad = true. 因此,如果您有 1 个好电话号码和 1 个坏电话号码,则不应出现。
出于某种原因,我正在努力寻找一种简单的方法来做到这一点,我觉得它应该看起来很简单。
这是一个开始,至少可以让我对所有客户的好坏数字进行计数,但我想知道是否有一种方法不需要使用子查询和in's?
select customer_id, is_bad, count(customer_id)
from customer_phone cp
group by customer_id, is_bad
order by customer_id desc
Run Code Online (Sandbox Code Playgroud)
我发现添加像这样的布尔列的最直观的方法是添加到何时和何时SUM的列:1TRUE0FALSE
CASE WHEN some_bool THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
SELECT id
FROM phones
GROUP BY id
HAVING
SUM(CASE WHEN NOT is_bad THEN 1 ELSE 0 END) = 0
Run Code Online (Sandbox Code Playgroud)
查看这个 SQL fiddle,它显示了正在执行的查询。