Maison  >  Questions et réponses  >  le corps du texte

Comment obtenir la moyenne de la colonne DATETIME dans MySQL tout en regroupant par d'autres colonnes

<p>Je crée et remplis une table MySQL à l'aide de la requête suivante : </p> <pre class="brush:php;toolbar:false;">SET time_zone = '+00:00'; CREATE TABLE timestamp_n_datetime ( identifiant INT, heure DATEHEURE, avg_time DATETIME ); INSÉRER DANS timestamp_n_datetime(id,time,avg_time) VALEURS ("1", "03/01/2023 10:12:13", NULL), ("1", "2023-02-04 11:13:14", NULL), ("2", "2023-03-02 09:14:10", NULL), ("2", "2023-04-02 05:15:50", NULL), ("1", "2023-06-10 02:04:10", NULL);</pre> <p>Je souhaite remplir la colonne "avg_time" avec la moyenne de la colonne "time" regroupée par identifiant. Par exemple, la première ligne a « id » = 1, donc la colonne « avg_time » doit prendre la moyenne des première, deuxième et cinquième lignes puisque leur « id » est également 1. </p> <p>Comment dois-je répondre à cette question ? </p> <p>Modifier : pour clarifier, je souhaite convertir toutes les colonnes DATETIME en millisecondes, les additionner toutes, puis les diviser par le nombre ajouté. Par exemple, pour id=2, les convertir en millisecondes, les additionner puis les diviser par 2 (puisqu'il y a deux lignes avec « id » = 2) donne la moyenne du 17 mars 2023 à 17h45. Je veux obtenir la moyenne de cette façon. </p>
P粉460377540P粉460377540411 Il y a quelques jours438

répondre à tous(1)je répondrai

  • P粉347804896

    P粉3478048962023-09-06 10:33:08

    Utilisez ceci UNIX_TIMESTAMP 转换为秒,然后使用 FROM_UNIXTIME pour le remettre au format datetime, voici comment obtenir la moyenne :

    select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`)))
        from timestamp_n_datetime
        group by id;

    Voici comment remplir la moyenne :

    update timestamp_n_datetime  td
    inner join (
        select id, FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(`time`))) as average
        from timestamp_n_datetime
        group by id
    ) as s on s.id = td.id
    set avg_time = s.average;

    répondre
    0
  • Annulerrépondre