首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算在x条件下与表无关的行数

计算在x条件下与表无关的行数
EN

Stack Overflow用户
提问于 2021-09-15 21:25:49
回答 3查看 234关注 0票数 1

我有一个users表和一个hobbies

代码语言:javascript
复制
users

id | name   |
---+--------+
1  | John   |
2  | Jim    |
3  | Karen  |
代码语言:javascript
复制
hobbies

id | user_id | hobby   |
---+---------+---------+
1  | 1       | drawing |
2  | 1       | singing |
3  | 2       | coding  |
4  | 2       | drawing |
6  | 3       | chess   |
7  | 3       | coding  |

我需要一个SQL查询,它可以计算出有多少用户没有“画画”或“唱歌”作为业余爱好。在本例中,只有Karen会被计算在内,因为他们是唯一不喜欢唱歌或画画的人。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-15 21:28:03

您可以使用not exists操作符:

代码语言:javascript
复制
SELECT *
FROM   users u
WHERE  NOT EXISTS (SELECT *
                   FROM   hobbies h
                   WHERE  hobby IN ('drawing', 'singing') AND
                          h.user_id = u.id)
票数 1
EN

Stack Overflow用户

发布于 2021-09-15 21:27:21

您可以使用not exists。。。两次:

代码语言:javascript
复制
select u.*
from users u
where not exists (select 1 from hobbies h where h.user_id = u.id and h.hobby = 'singing') and
      not exists (select 1 from hobbies h where h.user_id = u.id and h.hobby = 'dancing') ;
票数 1
EN

Stack Overflow用户

发布于 2021-09-15 22:10:42

简单

代码语言:javascript
复制
declare @users table(id int, name varchar(15))
declare @hobbies table(id int, user_id int, hobby varchar(15))

insert into @users
values
 (1,'John'),
 (2,'Jim'),
 (3,'Karen')

insert into @hobbies
values
 (1,1,'drawing'),
 (2,1,'singing'),
 (3,2,'coding'),
 (4,2,'drawing'), 
 (6,3,'chess'),
 (7,3,'coding')


select count(*)
from @users u
left join
(select u.id
from @users u
    inner join @hobbies h
    on h.user_id = u.id
where h.hobby in ('drawing','singing'))users_with_hobbies  on users_with_hobbies.id = u.id
where users_with_hobbies.id is null

-- or

select count(*)
from @users u   
where not id in (select u.id
   from @users u
    inner join @hobbies h
    on h.user_id = u.id
where h.hobby in ('drawing','singing'))

-- or   
select count(*)
from @users u   
where not exists (select null
  from @hobbies h   
  where h.user_id = u.id and h.hobby in ('drawing','singing'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69199962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档