ГРУППИРОВАТЬ ПО Функциям, Подсчитывая Общее Количество Совпадений Для Каждой Строки | SQL/Oracle

#sql #oracle #group-by #count

Вопрос:

Я пытаюсь запросить пару своих таблиц, чтобы показать количество (количество) премиум-участников в каждом филиале сети зоомагазинов (в каждом есть стандартные и премиум-участники) и адрес каждого магазина (адрес представляет собой структурированный тип, состоящий из улицы номер, город и почтовый индекс/почтовый индекс.

При попытке создать запрос он продолжает подсчитывать общее количество клиентов премиум-членства во всех филиалах и показывает это как количество для каждого магазина/филиала.

Как показано ниже, во всех филиалах в Лос-Анджелесе, Сан-Франциско и Сан-Диего количество премиум-клиентов равно 9, что соответствует общему числу премиум-клиентов во всех филиалах. Правильное количество должно быть 5 для LA, 3 для SF и 1 для SD.

Я не уверен, что не так с моим кодом?

ВЫБЕРИТЕ КОЛИЧЕСТВО(x.Идентификатор клиента), y.Адрес магазина.Адрес улицы, y.Адрес магазина.город, y.Адрес магазина.почтовый индекс
ИЗ воспоминаний О домашних животных x, из воспоминаний о домашних животных y
ГДЕ x.членство = "Премиум"
ГРУППА ПО адресу магазина.Адрес улицы, адрес магазина.город, адрес магазина.почтовый индекс
ЗАКАЗ ПО КОЛИЧЕСТВУ(x.ИДЕНТИФИКАТОР клиента);

Результат запроса

Ответ №1:

Во-первых, вы должны использовать правильный JOIN синтаксис.

Во-вторых, вы должны использовать значимые псевдонимы таблиц.

В-третьих, вам JOIN нужно исправить пункт для присоединения. Следующее-это предположение:

 SELECT COUNT(*), b.storeAddress.streetAddress, b.storeAddress.city, b.storeAddress.postcode
FROM petStoreMemberships m JOIN
     petStoreBranches b
     ON m.branchId = b.branchId
WHERE m.membership = 'Premium'
GROUP BY b.storeAddress.streetAddress, b.storeAddress.city, b.storeAddress.postcode
ORDER BY COUNT(*);
 

Если вы используете правильный JOIN синтаксис, вы получите ошибку из-за отсутствующего ON предложения.