В моей базе данных есть две похожие таблицы с разными именами. Один из столбцов, содержащихся в обеих таблицах, называется «zips», который содержит почтовый индекс.SQL Count из двух таблиц с внутренним соединением из третьей таблицы
У меня есть другая таблица (US zip code table), где каждая запись содержит имя графства, идентификатор округа, состояние, идентификатор состояния и почтовый индекс.
Мне нужен запрос, который расскажет мне, сколько записей в первых двух таблицах соответствует указанному идентификатору округа, и группирует результаты по уезду.
То есть, скажем, таблица A имеет 4 записи для почтового индекса '30017', а таблица B имеет 1 запись для '30017'. В таблице почтовых индексов США «30017» соответствует названию графства «Gwinnett» и идентификатору округа «839». Когда я запускаю запрос, желаемый результат:
Gwinnett 5
Вот последний запрос, который я пробовал. Я не знаю, какие цифры он возвращает. Это определенно не то, что я ожидаю, поскольку я пробовал индивидуальные запросы компонентов для проверки результатов.
SELECT b.County, COUNT(*) as Calls FROM (aLeads a, pLeads p)
INNER JOIN zipCodes b ON a.zip = b.ZipCode
WHERE b.countyID IN (2897, 2146, 839)
AND a.callDate BETWEEN '2013-10-01' AND '2013-11-30'
GROUP BY b.County
Любые идеи?
Спасибо за предложение, и хорошая идея, чтобы начать с кодовой таблицей зип первым. Однако этот запрос возвращает пустой набор. Любые другие идеи? –
Вы можете сделать две временные таблицы, первая из которых - это zipcode, соединенный с aLeads. Второй - это zipcode, соединенный с pLeads. Каждая временная таблица будет иметь почтовый индекс и счетчик. Наконец, присоедините две таблицы temp вместе и добавьте счетчики. – steinmas
Его действительно близко к правильности. После некоторого анализа кажется, что единственная проблема с запросом, который вы предложили, - это критерии даты. Я думаю, что он возвращает пустой набор, потому что предложение даты рассматривает только таблицу a 'AND a.callDate BETWEEN '2013-10-01' AND '2013-11-30'' –