2017-01-16 4 views
0

Я использую MySQL. У меня есть 2 стола, к которым я присоединяюсь. Мне нужно использовать count (a.parent_id) как countcolumn, чтобы этот столбец был добавлен в таблицу, которую я создаю с помощью моего выбора. Я хочу знать номер, который появляется каждый «parent_id», но видеть все таблицы с столбцом в соответствии с запросом ниже. проблема заключается в том, что он возвращает только 1 запись и рассчитывает все родительские как там были такие же ..MYSQL с подсчетом или с номером

select count(parent_id) as count_column 
    , a.parent_id 
    , b.job_id 
    , a.status as parent 
    , b.status as subparent 
    , b.description 
from jobs a 
inner join jobs_steps b 
    on a.id=b.job_id 
where name='XXX' 
    and a.status='FAILED' 
order by a.parent_id desc 

Если удалить счетчик родительский идентификатор в начале она возвращает 78 записей

select a.parent_id 
    , b.job_id 
    , a.status as parent 
    , b.status as subparent 
    , b.description 
from jobs a 
inner join jobs_steps b 
    on a.id=b.job_id 
where name='XXX' 
    and a.status='FAILED' 
order by a.parent_id desc 

Я хочу, чтобы в 78 записях с новым столбцом был указан номер, который появляется каждый parent_id.

+0

Даже если MySql не требует, (из-за [расширенная группа по] (https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html)) при использовании агрегатных функций, таких как count, max, avg, min, все столбцы, не являющиеся частью агрегации, должны быть включены в предложение 'group by'. В противном случае движок может выбрать одно значение из неагрегированных столбцов и вернуть его значение. Это было бы хорошо, если бы все значения были SAME, но если значения меняются, то определение группы скорее всего приведет к тому, что результаты будут ближе к желаемому. Это объясняет, почему вы просто получаете 1 запись. – xQbert

+0

Я думаю, что вы хотите 'GROUP BY a.parent_id , b.job_id , a.status как родитель , b.status в subparent , b.description' не только a.parent_ID – xQbert

ответ

1

Если вы хотите сгруппировать свой результат на один родительский идентификатор, вы должны использовать GROUP BY, но это не вернет вам 78 записей, так как эти записи не являются групповыми на один родительский идентификатор, это вернет вам запись на родительский идентификатор , Я надеюсь, что это помогает

select count(a.parent_id) as count_column 
    , a.parent_id 
    , b.job_id 
    , a.status as parent 
    , b.status as subparent 
    , b.description 
from jobs a 
inner join jobs_steps b 
    on a.id=b.job_id 
where name='XXX' 
    and a.status='FAILED' 
group by a.parent_id 
order by a.parent_id desc 
+1

' Группа by' должны прийти перед 'order by' в SQL. – xQbert

+0

@xQbert обновлено, я забыл :) спасибо! – Roljhon

+0

группа не подходит для меня. Любое другое предложение? – OhadS

0

Предполагая, что вы после этого числа шагов в каждой работе (как повторяющееся значение для каждого из деталей заданий)

Обычно я хотел бы использовать функцию окна, но как MYSQL их не поддерживает, используйте запрос для подсчета количества pARENT_ID для каждого задания, а затем присоединиться назад ...

select C.JobSteps as count_column 
    , a.parent_id 
    , b.job_id 
    , a.status as parent 
    , b.status as subparent 
    , b.description 
from jobs a 
inner join jobs_steps b 
    on a.id=b.job_id 
LEFT JOIN (Select count(parent_ID) as JobSteps, job_ID 
      from Job_Steps 
      Group by Job_ID) C 
on c.Job_ID = B.Job_ID 
where name='XXX' 
    and a.status='FAILED' 
order by a.parent_id desc 

Это мне кажется быстрее, чем альтернативный вариант с использованием коррелировать запрос в избранном.

select a.parent_id 
    , b.job_id 
    , a.status as parent 
    , b.status as subparent 
    , b.description 
    , (Select count(JS.parent_ID) as JobSteps, JS.job_ID 
      from Job_Steps JS 
      where a.Id = JS.Job_ID 
      Group by Job_ID) C as count_column 
from jobs a 
inner join jobs_steps b 
    on a.id=b.job_id 
where name='XXX' 
    and a.status='FAILED' 
order by a.parent_id desc 
Смежные вопросы