2017-01-05 3 views
-1
item | user | times | data | id 
--------+-----------+-----------+-----------+------- 
item1 | user1  | 1  | data1  | 1 
item2 | user1  | 1  | data2  | 2 
item3 | user1  | 1  | data3  | 3 
item1 | user2  | 2  | data1  | 4 
item2 | user2  | 2  | data2  | 5 

Выше приведены данные из моей базы данных. Я хочу подсчитать, сколько элементов user1 есть в первый раз, которые также будут выполняться во второй раз. В этом случае результат должен возвращать 2, потому что есть 2 элемента, которые пользователь1 выполняет в первый раз, а user2 - во второй раз. Но я не могу построить инструкцию SQL после многих попыток.CASE .. THEN in Postgresql

Может ли кто-нибудь помочь в решении этой проблемы?

+1

Что ты значишь, когда вы говорите, 'у result'? Означает ли это, что «запись имеет этот предмет»? В этом случае item1, 2, 3 имеют запись с 'times = 1' и' user = 'user1'', но только item1,2 имеют запись с 'time <> 1'? –

+0

Спасибо за ответ, извините за мой пост, я только что отредактировал –

+0

Я удивлен утверждением в редакции. Я знаю, что этот пост сбивает с толку, но серьезно, меняя «много элементов user1 сделал в первый раз» на «многие пользователи user1 в первый раз»? А остальное так мало, что это не помогает. – jpmc26

ответ

1

Я не понимаю, как заголовок вопроса относится к самому вопросу. Однако здесь есть способ, чтобы получить то, что вы хотите:

select count(*) 
from t t1 
where "user" = 'user1' and times = 1 and exists (
    select * 
    from t t2 
    where times = 2 and t1.data = t2.data); 

EDIT: Я просто трансформируюсь существует в не существует, чтобы соответствовать своему вопросу редактировать :-)

+0

Спасибо, Фабиан, я пытаюсь использовать CASE ... ТОГДА в postgres, чтобы получить результат, тогда я назвал сообщение CASE ... THEN, извините за это. –

+0

Добро пожаловать, и не волнуйтесь по поводу названия, я был просто удивлен, когда прочитал вопрос ;-) (я только что отредактировал свой ответ в соответствии с новым вопросом) –

+0

Еще раз спасибо, Фабиан, вы сэкономите время , я иду с функцией и CASE ... THEN и забыть о себе присоединиться ... это глупо. спасибо за ваше предложение, я постараюсь завершить его. –