MySQL = группировка количества продаж по месяцам, затем отображение месяцев в виде имен (январь, февраль ... DEC), а не числовое значение (1,2,3-12) - PullRequest
0 голосов
/ 16 октября 2019

Это кажется довольно простой проблемой, но я не могу понять, как изменить числовое значение месяца на фактическое имя месяца после того, как счетчик продаж сгруппирован по месяцу.

В основном я хочу перечислитьобщая сумма продаж за каждый месяц. В настоящее время это то, что у меня есть:

SELECT MONTH(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY MONTH(SaleDate);

Это прекрасно работает для того, что я хочу сделать. И дает такие результаты:

+---------------------------------+
|     Month      |   TotalSales   |
+---------------------------------+
|       1        |       123      |
|       2        |       142      |
|       3        |       183      |
|       4        |       99       |
|       5        |       127      |
|       6        |       202      |
+---------------------------------+
etc....

Однако я хочу, чтобы в списке были месяцы, такие как январь, февраль ... и т. Д.

Я пробовал несколько способов, используя MONTHNAME (), MONTHNAME (STR_TO_DATE) и многие другие, но, похоже, проблема связана с группировкой месяцев.

Я чувствую, что мне не хватает очень простого решения, но я не могу найти онлайн. Для справки даты в таблице «Продажи» являются значениями по умолчанию (2017-01-01 или ГГГГ-ММ-ДД). И таблица продажи имеет три атрибута: SaleID, StoreID и SaleDate.

+---------------------------------+
|     Month      |   TotalSales   |
+---------------------------------+
|    January     |       123      |
|    February    |       142      |
|     March      |       183      |
|     April      |       99       |
|      May       |       127      |
|     June       |       202      |
+---------------------------------+
and so on...

Вот сообщение об ошибке, которое я получаю из методов, которые я пробовал:

Код ошибки: 1055Выражение №1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец «UsedCarDealer.Sale.SaleDate», который функционально не зависит от столбцов в предложении GROUP BY;это несовместимо с sql_mode = only_full_group_by

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Я бы предложил:

SELECT MONTHNAME(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY MONTH(SaleDate), MONTHNAME(SaleDate)
ORDER BY MONTH(SaleDate);

Это также вернет значения в хронологическом порядке. Примечание: при использовании месяцев обычно имеет смысл включать год в качестве фильтра или в GROUP BY. Возможно, лучшая версия запроса:

SELECT YEAR(SaleDate) as Year, MONTHNAME(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY MIN(SaleDate);
0 голосов
/ 16 октября 2019

Попробуйте это:

SELECT MONTHNAME(STR_TO_DATE(MONTH(SaleDate), '%m')) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY MONTH(SaleDate);
...