Как заменить одно значение, рассчитанное COUNT, другим значением в результате SELECT? - PullRequest
0 голосов
/ 30 мая 2019

Предположим, есть две таблицы

shop        seller
------      -------
id          id
seller_id   seller_name
goods       sallary

seller_id может повторяться, части из seller.id могут отсутствовать вообще.Итак, мне нужно получить результат запроса, состоящий из saller_name и подсчета количества магазинов на каждого продавца.Я сделал это так

SELECT seller_name, COUNT(seller_id) AS shops FROM seller 
LEFT JOIN shop ON seller.id = shop.seller_id GROUP BY seller_name. 

И это работает.Но проблема в том, что мне нужно заменить все 0 в магазинах текстом «нет».Я пытался сделать это через

REPLACE(COUNT(seller_id),0,"none") 

и с

CASE
WHEN COUNT(seller_id)=0 THEN "none"
ELSE COUNT(seller_id)
END

Но вместо ожидаемых чисел и ни одного я получаю случайный набор цифр и букв.Как это сделать?

Ответы [ 3 ]

1 голос
/ 30 мая 2019

Проблема в том, что 'none' - это строка, но значение - это число.Я настоятельно рекомендую вам придерживаться чисел, но это не ваш запрос.

Вам необходимо выполнить преобразование типов:

SELECT se.seller_name,
       (CASE WHEN COUNT(s.seller_id) = 0
             THEN 'none'
             ELSE CAST(COUNT(s.seller_id) AS VARCHAR(255))
        END) AS shops
FROM seller se LEFT JOIN
     shop s
     ON se.id = sh.seller_id
GROUP BY se.seller_name;

В MySQL используйте CAST(COUNT(s.seller_id) AS CHAR).Или почти любая база данных поддерживает CONCAT(COUNT(s.seller_id), ''), но использование CONCAT() для преобразования типов мне кажется вводящим в заблуждение.

0 голосов
/ 30 мая 2019

Вам нужно изменить ваш запрос на что-то вроде этого:

SELECT seller_name, 
CASE
WHEN COUNT(shop.Id)=0 THEN 'none'
ELSE CAST(COUNT(shop.Id) as NVARCHAR(10))
END AS shops FROM seller 
LEFT JOIN shop ON seller.id = shop.seller_id GROUP BY seller_name
0 голосов
/ 30 мая 2019
Point 1: REPLACE(COUNT(seller_id),0,"none") --It will replace all zero's with 'none'.

Если ваш счет равен 10, он вернет 1 нет на выходе.

Point 2: CASE  WHEN COUNT(seller_id)=0 THEN "none" ELSE COUNT(seller_id) END--It will gives you conversion failed error.

Таким образом, вам нужно разыграть счет в varchar, как указано ниже.

   SELECT se.seller_name,
       (CASE WHEN COUNT(s.seller_id) = 0
            THEN 'none'
            ELSE CAST(COUNT(s.seller_id) AS VARCHAR(10))
        END) AS shops
FROM seller se LEFT JOIN
     shop s
     ON se.id = sh.seller_id
GROUP BY se.seller_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...