Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql...Niemożliwe zapytanie?

Nie niemożliwe, po prostu zawiłe. Możesz użyć STR_TO_DATE przekonwertować ciągi na DATETIME obiekty, z których można następnie skorzystać MONTH aby uzyskać numer miesiąca. Pamiętaj jednak (jak skomentował @DRapp), że powinieneś przechowywać DATETIME wartości w ich natywnej formie, a nie jako VARCHAR , wtedy nie będziesz musiał zajmować się STR_TO_DATE . Mając numer miesiąca, możesz użyć agregacji warunkowej, aby uzyskać żądane wyniki:

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

Dane wyjściowe (dla przykładowych danych):

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

Demo na 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. Wiele tabel LINQ to SQL pozostawiło sprzężenie zewnętrzne

  2. MySQL – Poczekaj kilka sekund za pomocą SELECT SLEEP()

  3. Przyspieszenie perl DBI fetchrow_hashref

  4. Python:MySQLdb i biblioteka nie zostały załadowane:libmysqlclient.16.dylib

  5. Jak ten kod SQL może być błędny? Czego nie widzę?