sql >> Database teknologi >  >> RDS >> Mysql

Mysql...Umulig forespørgsel?

Ikke umuligt, bare indviklet. Du kan bruge STR_TO_DATE for at konvertere dine strenge til DATETIME objekter, hvorfra du derefter kan bruge MONTH for at få månedsnummeret. Bemærk dog (som @DRapp kommenterede), at du burde gemme DATETIME værdier i deres oprindelige form, ikke som VARCHAR , så behøver du ikke at håndtere STR_TO_DATE . Når du har fået månedsnummeret, kan du derefter bruge betinget aggregering for at få de ønskede resultater:

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

Output (for dine eksempeldata):

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

Demo på SQLFiddle




  1. Bestemmelse af påskedatoerne for ethvert år i Oracle PLSQL

  2. Udfyld Datagridview med MySQL-data

  3. Tips til at rette SQL Server Index Fragmentation

  4. SQL-injektion, citater og PHP