Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Помогите с запросом


Автор: Sharkfire88 11.12.2011, 00:16
Добрый день.

Firebird 2.1 


Таблица TASKS
Код


CREATE TABLE TASKS (
    ID_TASK      TYPE_ID,
    ID_OWNER     TYPE_ID,
    ID_USER      TYPE_ID,
);


Таблица COMMENTS
Код


CREATE COMMENTS (
    ID_COMMENT    TYPE_ID,
    ID_ITEM       TYPE_ID,
    COMMENT_TYPE  TYPE_SMALLINT,
    UNREAD        TYPE_LOGIC
);


Общий ключ у них TASKS.ID_TASK = COMMENTS.ID_ITEM

Мне надо получить 2 колонки:

1. Кол-во записей для каждого TASKS.ID_TASK, которые есть в COMMENTS с таким же ID_ITEM
2. Кол-во записей для каждого TASKS.ID_TASK, которые есть в COMMENTS с таким же ID_ITEM и UNREAD = 1 

К примеру:

Код

ID_TASK                   ALL_COMMENT_COUNT          UNREAD_COMMENT_COUNT
     0                             1                                 1 
     1                             2                                 0
     2                             5                                 2    


Спасибо.

Автор: ndbn 11.12.2011, 15:31

select t.ID_TASK
         ,(select COUNT(c.ID_COMMENT) from COMMENTS c where c.ID_ITEM = t.ID_TASK) as ALL_COMMENT_COUNT 
         ,(select COUNT(c.ID_COMMENT) from COMMENTS c where c.ID_ITEM = t.ID_TASK and c.UNREAD = 1) as UNREAD_COMMENT_COUNT 
  from TASKS t

Автор: Sharkfire88 11.12.2011, 16:27
Спасибо.

Автор: Zloxa 12.12.2011, 09:07
Код

select  TASKS.ID_TASK
         , count(COMMENTS.ID_ITEM) ALL_COMMENT_COUNT 
         , count(case when c.unread = 1 then 1 end) UNREAD_COMMENT_COUNT 
from tasks 
left join COMMENTS on TASKS.ID_TASK = COMMENTS.ID_ITEM
group by TASKS.ID_TASK

Автор: Sharkfire88 12.12.2011, 12:16
Спасибо, этот вариант судя по анализатору лучше ... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)