MySQL COUNT строки в подзапросе
У меня есть это утверждение MySQL, которое возвращает список всех наших дилеров, а также общее количество магазинов, которые у них есть. Я пытаюсь сделать так, чтобы я мог добавить дополнительные столбцы, которые возвращаются в зависимости от столбца объединенных магазинов.
Это основной оператор, который возвращает список дилеров (группа счетов) и общее количество / количество магазинов, назначенных группе счетов.
SELECT accountgroup, COUNT(storename) AS TotalAmountOfStores
FROM accounts
WHERE accountgroup <>''
AND othercode ='Site'
GROUP BY accountgroup
Я подумал, что использование приведенного ниже оператора в подзапросе SELECT позволит мне получить эти дополнительные столбцы, которые я хочу. Это утверждение работает само по себе, но я не смог включить его в приведенное выше утверждение как подзапрос.
SELECT COUNT( storename ) AS '2months'
FROM `accounts`
WHERE joineddate > date_sub(now(), interval 2 month)
AND accountgroup <> ''
AND othercode = 'Site'
GROUP BY accountgroup
Это утверждение, которое, как я думал, будет работать, но я получаю ошибку "#1242 - Подзапрос возвращает более 1 строки, что смущает меня, так как должно возвращать более одной строки":
SELECT accountgroup, COUNT(storename) AS TotalAmountOfStores,
(SELECT COUNT(storename)
FROM `accounts`
WHERE joineddate > date_sub(now(), interval 2 month) AND accountgroup <>'' AND othercode='Site'
GROUP BY accountgroup ) AS '2months'
FROM accounts
WHERE accountgroup <>''
AND othercode ='Site'
GROUP BY accountgroup
Я начинаю чувствовать, что подзапрос не является правильным подходом, и читаю на JOIN. Кто-нибудь может подтвердить это и, возможно, указать мне правильное направление?
Любая помощь с благодарностью. Заранее спасибо.
1 ответ
Вы можете СУММАТЬ раз, когда это условие истинно, используя if. Пример:
SELECT
accountgroup,
COUNT(storename) AS TotalAmountOfStores,
SUM(
IF(joineddate > date_sub(now(), interval 2 month), 1, 0)
) AS '2months'
FROM accounts
WHERE accountgroup <>''
AND othercode ='Site'
GROUP BY accountgroup