2016-06-14 2 views
1

У меня есть несколько сложная проблема. Это моя ситуация (ERD). ERD SchemeМножественный подсчет и умножение в одном запросе

Для приборной панели мне нужно создать сводную таблицу, которая показывает мне общее количество компетенций, используемых вакансиями. Поэтому мне нужно:

  • Подсчитайте количество вакансий в шаблон
  • Подсчитайте количество шаблонов в компетенцию
  • и последнее: умножить эти цифры, чтобы получить общее количество используемых аккомпанементов.

У меня есть первый запрос:

SELECT vacancytemplate_id, count(id) 
FROM vacancies 
group by vacancytemplate_id; 

И второй вопрос не так сложен, как, но я не знаю, что правильное решение будет. Я буквально озадачен мозгом. Мой разум не может понять, как я могу достичь следующего шага и поместить его в запрос. Пожалуйста вид незнакомца, помогите мне :)

EDIT: мой желаемый результат что-то вроде этого

NameOfComp, NrOfTimesUsed 
Leading, 17 
Inspiring, 2 

EDIT2: мета-запрос он должен выглядеть следующим образом:

SELECT NameOfComp, (count of the competences used by templates) * (number of vacancies per template) 

EDIT3: http://sqlfiddle.com/#!9/2773ca SQLFiddle

Большое спасибо!

+0

Создайте sqlfiddle, пожалуйста, так что нам не нужно – Drew

+0

@Drew Создает его, дайте мне a sec – Adam

ответ

1

Если я правильно понимаю ваш запрос, вы хотите получить кол-во компетенций на вакансию. Это можно сделать очень просто из-за своей структуры таблицы:

Select v.ID, count(*) from vacancy as v inner join CompTemplate_Table as CT 
     on v.Template_ID = CT.Template_ID group by v.ID; 

Причина вы можете сделать только один присоединиться, потому что там будет запись в CompTemplate_Table для каждой компетенции в каждом шаблоне. Кроме того, тот же самый ключ используется для добавления вакансии к шаблонам, который используется для присоединения шаблонов к CompTemplate_Table, поэтому они представляют одно и то же ключевое значение (и вы можете пропустить присоединение к таблице шаблонов, если вам не нужны данные оттуда).

Если вы хотите добавить эти данные в сводную таблицу, я оставлю это упражнение вам. Существует несколько учебных пособий, если вы делаете быстрый поиск в Google, и это не должно быть так сложно.

UPDATE: Для второго запроса вы смотрите на что-то вроде:

Select cp.NameOfComp, count(*) from vacancy as v inner join CompTemplate_Table as CT 
     on v.Template_ID = CT.Template_ID inner join competencies as CP 
     on CP.ID = CT.Comp_ID 
     group by CP.NameOfComp 

Различия здесь вы добавляете в таблице comptetencies, как вам нужны данные от этого, и группировку по CP.NameOfComp вместо id вакансии. Вы также можете ограничить это конкретными шаблонами, компетенциями или вакансиями, добавив в условия поиска (например, где CP.ID = 12345)

+0

Редактировать: после прочтения вашего запроса я должен отметить это: я хочу знать, на какой компетенции сколько раз он использовался во всех вакансиях. Вау, я многому обиделась. Большое спасибо за помощь! – Adam

+0

половина написания хорошего запроса избавляет от всего дерьма, которого вам действительно не нужно. –

+0

Итак, чтобы уточнить мои результаты, мне нужно количество компетенций в каждой компетенции! Я ссылаюсь на свой желаемый результат в своем главном сообщении :) – Adam

Смежные вопросы