sql >> Database >  >> RDS >> Mysql

Mysql...Onmogelijke zoekopdracht?

Niet onmogelijk, gewoon ingewikkeld. U kunt gebruiken STR_TO_DATE om je strings om te zetten in DATETIME objecten, waaruit u vervolgens MONTH om het maandnummer te krijgen. Merk echter op (zoals @DRapp opmerkte) dat je DATETIME . zou moeten opslaan waarden in hun oorspronkelijke vorm, niet als VARCHAR , dan hoeft u zich niet bezig te houden met STR_TO_DATE . Als u het maandnummer heeft, kunt u voorwaardelijke aggregatie gebruiken om de gewenste resultaten te krijgen:

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

Uitvoer (voor uw voorbeeldgegevens):

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

Demo op SQLFiddle




  1. Fout bij het bulksgewijs laden van gegevensconversie (afkapping)

  2. Resultaten van een SQL-query samenvoegen in Oracle

  3. DevOps:DBA of Developer – De juiste balans vinden

  4. Hoe snel waarden in tabel in SQL Server Management Studio bewerken?