Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql...Невъзможна заявка?

Не е невъзможно, просто е объркано. Можете да използвате STR_TO_DATE за да конвертирате вашите низове в DATETIME обекти, от които след това можете да използвате MONTH за да получите номера на месеца. Имайте предвид обаче (както @DRapp коментира), че трябва да съхранявате DATETIME стойности в тяхната естествена форма, а не като VARCHAR , тогава не би трябвало да се занимавате с STR_TO_DATE . След като получите номера на месеца, можете да използвате условно агрегиране, за да получите желаните резултати:

SELECT name,
       COALESCE(AVG(CASE WHEN mth = 1 THEN PTS END), 0) AS Jan,
       COALESCE(AVG(CASE WHEN mth = 2 THEN PTS END), 0) AS Feb,
       COALESCE(AVG(CASE WHEN mth = 3 THEN PTS END), 0) AS Mar,
       COALESCE(AVG(CASE WHEN mth = 4 THEN PTS END), 0) AS Apr,
       -- repeat for May to November
       COALESCE(AVG(CASE WHEN mth = 12 THEN PTS END), 0) AS `Dec`,
       AVG(PTS) AS AVG
FROM (
  SELECT name, PTS AS PTS, MONTH(STR_TO_DATE(DATE, '%a %b %e %H:%i:%s %Y')) AS mth
  FROM data
) d
GROUP BY name

Изход (за вашите примерни данни):

name    Jan     Feb     Mar     Apr     Dec     AVG
Chris   0       4       0       2       0       3
John    0       0       0       2.6667  0       2.6667

Демо на SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL. Първичен ключ в релационна таблица. Уникален идентификатор или множество уникални ключове?

  2. Качване на изображения в CKEditor без използване на плъгин

  3. PHP въпрос:Как да коригирам тези if/elseif изрази

  4. Rails 3 с mysql проблем

  5. Форматиране на връщане на заявка за модел на CakePHP