계정으로 아래에 제공된 표를 가지고 가서, 내가 얼마나 많은의 발생 계산 할 수있게하려면 여전히 제공 한 사실이 없습니다 아직 없습니다.Events
User
availability
표 users
| name | id |
|---------|----|
| John | 1 |
| Francis | 2 |
| Peter | 3 |
| Mike | 4 |
표 events
| id | name |
|----|---------|
| 1 | Event 1 |
| 2 | Event 2 |
표 availability
| answer | event_id | user_id |
|--------|----------|---------|
| yes | 1 | 1 |
| yes | 2 | 1 |
| no | 1 | 2 |
| maybe | 2 | 4 |
예상되는 대답은 다음과 같습니다.
예상 답변 :
| user_id | count |
|---------|-------|
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 1 |
각 구성원이 응답 한 이벤트 수에 대한 쿼리를 수행 할 수 있었지만 응답 하지 않은 이벤트 수를 찾을 수있었습니다 .
DBFiddle : https://www.db-fiddle.com/f/mwv4F1wYZ9UxB56L9mMjFQ/1
SQL :
create table events (
id int auto_increment primary key,
name varchar(100) null
);
create table users (
name varchar(100) null,
id int auto_increment primary key
);
create table availability (
answer text null,
event_id int null,
user_id int not null,
constraint availability_events_id_fk
foreign key (event_id) references events (id),
constraint availability_users_id_fk
foreign key (user_id) references users (id)
);
INSERT INTO events (id, name) VALUES (1, 'Event 1');
INSERT INTO events (id, name) VALUES (2, 'Event 2');
INSERT INTO users (name, id) VALUES ('John', 1);
INSERT INTO users (name, id) VALUES ('Francis', 2);
INSERT INTO users (name, id) VALUES ('Peter', 3);
INSERT INTO users (name, id) VALUES ('Mike', 4);
INSERT INTO availability (answer, event_id, user_id) VALUES ('yes', 1, 1);
INSERT INTO availability (answer, event_id, user_id) VALUES ('yes', 2, 1);
INSERT INTO availability (answer, event_id, user_id) VALUES ('no', 1, 2);
INSERT INTO availability (answer, event_id, user_id) VALUES ('maybe', 2, 4);
cross join
테이블을 users
만들고 events
가능한 모든 조합을 생성 한 다음 left join
table 을 생성 할 수 있습니다 availability
. 그런 다음 집계 및 조건부 sum()
는 예상 결과를 제공합니다.
select
u.id user_id,
sum(case when a.event_id is null then 1 else 0 end) cnt
from users u
cross join events e
left join availability a
on a.event_id = e.id and a.user_id = u.id
group by u.id
order by u.id
user_id | cnt ------ : | -: 1 | 0 2 | 1 3 | 2 4 | 1
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다