web-dev-qa-db-fra.com

mysql group by et trie chaque groupe

J'ai le tableau suivant:

ID NOM HEURE 
 1 A 0 
 2 A 3 
 3 B 1

J'utilise la requête ci-dessous qui produit:

SELECT * FROM `table` GROUP BY `NAME`
ID NOM HEURE 
 1 A 0 
 3 B 1

Et je veux utiliser GROUP BY pour générer un résultat comme celui-ci (tri par remise dans la colonne TIME):

ID NOM HEURE 
 2 A 3 
 3 B 1
13
lachekar
SELECT NAME, MAX(TIME) as TIME 
FROM table 
GROUP BY time 
ORDER BY time DESC
18
Jiri Kratochvil
 select * from (select * from table order by TIME DESC) t group by NAME
7
php

Essayez cette solution à partir d’ici http://www.cafewebmaster.com/mysql-order-sort-group , elle a pu résoudre mon problème aussi :)

Échantillon:

SELECT * FROM 

(
select * from `my_table` order by timestamp desc
) as my_table_tmp

group by catid

order by nid desc
3
dreamluverz

Eh bien, vous devez décider de ce que vous voulez voir dans les champs ID et Heure après le groupe. A titre d'exemple, je sélectionnerai le MAX (ID) et le SUM (heure), puis l'ordre par desc total.

SELECT MAX(id), name, SUM(time) AS totaltime
FROM YourTableName
GROUP BY name
ORDER BY totaltime DESC

J'espère que cela t'aides.

0
Skorpioh

Pour obtenir les lignes avec le temps le plus élevé par groupe, vous pouvez utiliser une auto-jointure. 

select a.*
from demo a 
left join demo b on a.NAME =b.NAME and a.TIME < b.TIME
where b.NAME is null;

OR

select a.*
from demo a 
join (
  select NAME, max(`TIME`) as `TIME`
  from demo
  group by NAME
) b on a.NAME =b.NAME and a.TIME = b.TIME;

Démo

0
M Khalid Junaid
select id, name, sum(time) from tb1 where id>1 group by name;

le résultat sera:

+------+------+-----------+
| id   | name | sum(time) |
+------+------+-----------+
|    2 | A    |         3 |
|    3 | B    |         1 |
+------+------+-----------+
0
Common Man