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 
Другие вопросы по тегам