2014-12-11 2 views
0

У меня есть две таблицы: пользователи и фотографии.Сравнение подсчетов в SQL, где статья

У пользователей много фотографий. У фотографий есть столбец user_id, у фотографа есть один пользователь. В фотографиях также есть столбец, который называется 0 или 1.

Мне нужно знать количество пользователей, у которых есть как минимум 1 фотография с сообщением = 1. Мне также нужно получить количество пользователей, у которых есть не менее 2 фотографии с сообщением = 1.

Как бы это сделать? Вот что я хотел бы сделать, но это, очевидно, не работает:

select count(*) 
from users join 
(select * from photos where photos.reported = 1) as p2 
on users.photo_id = p2.id; 
+0

ЗАКАНЧИВАТЬ предложения HAVING, это может быть то, что вам нужно: HTTP: //www.w3schools .com/sql/sql_having.asp – ChrisStillwell

+1

У вас действительно есть поле users.photo_id? Это означает, что у вас должно быть столько записей в таблице пользователя, сколько есть фотографий. Это не имеет смысла. –

+0

Как выглядит ваш ожидаемый результат? Я просто не могу представить конечный результат ... учитывая вышеизложенное. – xQbert

ответ

0

Просто получите гистограмму t он считает:

select numreported, count(*), min(user_id), max(user_id) 
from (select p.user_id, sum(p.reported = 1) as numreported 
     from photos p 
     group by p.user_id 
    ) p 
group by numreported 
order by numreported; 

Это дает число пользователей, которые имеют все отсчеты numreported, включая 0.

1

Это, по крайней мере, 1

select count(distinct userid) 
from photos 
where reported = 1 

Это, по крайней мере 2.

select count(distinct userid) 
from photos 
where reported = 1 
group by userid 
having count(userid) > 2 
0

Что-то например, следует работать

select count(hasOne) cntHasOne, count(hasTwo) cntHasTwo from 
(select users.user_id, 1 hasOne, 
case when count(*) > 1 then 1 else 0 end hasTwo 
from users inner join solution on(users.user_id = solution.user_id) 
where solution.winning_status = 1 
group by user_id) T1 
Смежные вопросы