Как заставить MySQL возвращать пустой день при группировании по дате? - PullRequest
0 голосов
/ 30 октября 2009

У меня есть запрос MySQL, подобный этому:

SELECT DAYNAME(CreatedAt) AS TheDay, SUM(Amount) AS TheSum
FROM OrderTransactions
GROUP BY TheDay

# Returns an array like:
# Array
# (
#     [0] => Array
#         (
#             [TheDay] => Thursday
#             [TheSum] => 0.02
#         )
# 
#     [1] => Array
#         (
#             [TheDay] => Wednesday
#             [TheSum] => 0.02
#         )
# 
# )

У меня также есть пункт для выбора только транзакций за последнюю неделю. Если в определенные дни транзакций не было, как я могу заставить его возвращать сумму в размере 0,00 долл. США за каждый пустой день?

1 Ответ

1 голос
/ 30 октября 2009

Обычно здесь используется метод UNION, противоположный выбранному вами.

Допустим, у вас есть таблица имен дней со значениями "понедельник", "вторник" ... "воскресенье" в поле name.

SELECT DAYNAME(CreatedAt) AS TheDay, SUM(Amount) AS TheSum
  FROM OrderTransactions
  GROUP BY TheDay
UNION
SELECT `name`, 0 FROM daynames
  WHERE daynames.name NOT IN (SELECT DISTINCT DAYNAME(CreatedAt) FROM OrderTransactions) 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...