Как подсчитать записи нескольких таблиц, которые соответствуют результатам базовой таблицы в одном запросе?

0

В приведенном ниже запросе перечислены все имена таблиц процедур и количество совпадающих результатов в таблице 1, а именно:

SELECT p.name, COUNT(t1.id) as Quantity
FROM procedures p
LEFT JOIN table1 t1
ON p.id = t1.id
GROUP BY p.name ASC

Как я могу сделать запрос выше, но сделать счет многих других таблиц? Представьте, что у меня есть еще 2 таблицы для подсчета, и запрос выводит такие столбцы:

Name Quantity1 Quantity2 Quantity3
A        0       100        27
B        10      0          15
C        50      200        1

Таблица процедур:

id   name
1     A
2     B
3     C

Другие таблицы, которые я хочу подсчитать совпадающие результаты на основе процедур

table1, table2, table3...

id   name
1     A
1     A
1     A
2     B
2     B
3     C
3     C
  • 0
    Пример данных и желаемых результатов помогут. Дубликаты делают это сложно.
  • 0
    Я поместил некоторые образцы данных, чтобы сделать их более понятными.
Теги:

2 ответа

0

Лучшим способом, вероятно, является объединение до join:

SELECT p.name, SUM(t1.cnt1) as cnt1
FROM procedures p LEFT JOIN
     (SELECT t1.id, COUNT(*) as cnt1
      FROM table1 t1
      GROUP BY t1.id
     ) t1
     ON p.id = t1.id
GROUP BY p.name ASC;

Хммм, вы все равно будете получать дубликаты, если name и id не 1-1. Если это проблема, то:

SELECT p.name, t1.cnt1 as cnt1
FROM (SELECT DISTINCT name
      FROM procedures p
     ) p LEFT JOIN
     (SELECT p.name, COUNT(*) as cnt1
      FROM table1 t1 JOIN
           procedures p
           ON p.id = t1.id
      GROUP BY p.name
     ) t1
     ON p.name = t1.name;

Такой подход будет безопасно распространяться.

0

Присоединитесь к другим таблицам:

SELECT p.name, 
       COUNT(t1.id) as Quantity1, 
       COUNT(t2.id) as Quantity2,
       COUNT(t3.id) as Quantity3
FROM   procedures p
       LEFT JOIN table1 t1 ON p.id = t1.id
       LEFT JOIN table2 t2 ON p.id = t2.id
       LEFT JOIN table3 t3 ON p.id = t3.id
GROUP  BY p.name ASC
  • 0
    Я попробовал ваше решение, отображение выполняется так, как я хотел, но значения счетчика странные, похоже, что один столбец влияет на счетчик других, например: Количество1 имеет процедуру А, равную 20, это значение верное, но в количестве 2 Та же процедура A, которая должна быть равна 5, выглядит как 20, повторяя то же значение количества2. Есть ли у вас какие-либо идеи, как сделать все эти подсчеты изолированно, без помех между столбцами?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню