Выберите количество из таблицы на основе условия

Причина, по которой размер вашего указателя составляет 4 байта, заключается в том, что вы компилируете 32-битную архитектуру. Как отметил FryGuy, в 64-битной архитектуре вы увидите 8.

0
задан trokiize 17 January 2019 в 14:40
поделиться

4 ответа

Таблица: ОБНОВЛЕНО # 3 - Объединяет ли это все это?

0
ответ дан level3looper 17 January 2019 в 14:40
поделиться

Вы создаете для каждой строки фиктивный столбец с именем type, применяя необходимое условие,
со значением 0 или 1 и суммируя по нему:

select t.username, sum(t.type) num_of_signed_docs from (
select a.username, 
case
  when event = 'reject' then 0
  when exists 
  (select 1 from audit where doc_id = a.doc_id and 
    datetime > a.datetime and event = 'reject')
  then 0
  else 1 end as type
from audit a
) t
group by t.username

См. демо для SQL Server
и демо для MySQL

Редактировать
[ 1111]

select a.username, count(distinct a.doc_id) num_of_signed_docs 
from audit a
where
  a.event = 'sign'
  and
  not exists (
    select 1 from audit where 
      doc_id = a.doc_id and datetime > a.datetime and event = 'reject'    
  )
group by a.username

См. Демонстрацию для SQL Server
и демонстрацию для MySQL

0
ответ дан forpas 17 January 2019 в 14:40
поделиться

Это то, что вы хотите?

select user, sum(case when event = 'sign' then 1 else 0 end) as num_signs
from audittable
group by user;
0
ответ дан Gordon Linoff 17 January 2019 в 14:40
поделиться

Извините, если есть опечатки. Я не могу проверить орфографию. Но моя идея состоит в том, чтобы получить последний идентификатор записи с событием отклонения и выполнить манипуляции с остальной таблицей. Для оптимизации запроса вы можете сохранить этот идентификатор в переменной.

SELECT user, COUNT(event = 'sign') AS `num_of_signed_docs`
FROM audittable
WHERE `id` > (SELECT `id` FROM audittable 
                WHERE `event` = 'reject' 
                ORDER BY `id` DESC LIMIT 1)
GROUP BY user;
0
ответ дан asd-tm 17 January 2019 в 14:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: