Использование CONCAT с оператором CASE работает некорректно

0

У меня есть следующая таблица в MySQL, называемая "книги",

Изображение 174551

Что я хочу

Я хочу выбрать author_lname и количество книг, которые написал каждый автор, но если количество книг, написанных любым автором, равно 1 то оно должно отображаться как 1 Book и если количество написанных книг больше 1 тогда я хочу объединить слово Books с количеством написанных книг.

Это то, что я пробовал

Поэтому для этого я попытался выполнить следующий запрос

SELECT author_lname,
       CASE
          WHEN COUNT(*) = 1 THEN '1 Book'
          ELSE CONCAT(COUNT(*),' Books')
       END AS 'Book Count'
FROM books
       GROUP BY author_lname, author_fname;  

Результат вышеуказанного запроса

Изображение 174551

Вопрос

Как вы можете видеть, вывод запроса - это не то, что я хочу. Пожалуйста, скажите мне, почему я получаю этот результат, что я делаю неправильно и как я могу получить желаемый результат?

Теги:

1 ответ

1
Лучший ответ

Вам не хватает броска вокруг CONCAT;)

SELECT author_lname,
   CASE
      WHEN COUNT(*) = 1 THEN '1 Book'
      ELSE CAST(CONCAT(COUNT(*),' Books') AS CHAR)
   END AS 'Book Count'
FROM books
   GROUP BY author_lname, author_fname;  
  • 0
    Я беру онлайн курс по MySQL и инструктор сделал то же самое, что и я, чтобы получить желаемый результат, и это сработало для него. Может ли это быть проблемой, связанной с другой версией MySQL ? А также не могли бы вы объяснить причину, по которой нам нужен cast вокруг CONCAT ?
  • 0
    Хорошо, я помню, что MySQL Query Browser, который мы использовали в моей предыдущей компании, также отображал текст, который был BLOB. Я не совсем уверен, почему ваша версия приводит к BLOB - может быть что-то с вашей версией MySQL или конфигурации ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню