webentwicklung-frage-antwort-db.com.de

mySQL-Gruppe nach und sortieren Sie jede Gruppe

Ich habe folgende Tabelle:

ID NAME TIME 
 1 A 0 
 2 A 3 
 3 B 1

Ich verwende die folgende Abfrage, die produziert:

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

Und ich möchte GROUP BY verwenden, um ein solches Ergebnis zu generieren (Rabatt nach TIME-Spalte sortieren):

ID NAME TIME 
 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

Versuchen Sie diese Lösung hier http://www.cafewebmaster.com/mysql-order-sort-group , sie konnte mein Problem auch lösen :)

Probe:

SELECT * FROM 

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

group by catid

order by nid desc
3
dreamluverz

Nun, Sie müssen entscheiden, was Sie in den ID- und Zeitfeldern nach der Gruppe sehen möchten. Als Beispiel wähle ich die MAX (ID) und die SUMME (Zeit) und ordne dann die Gesamtzeit ab.

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

Hoffe das hilft.

0
Skorpioh

Um Zeilen mit der höchsten Zeit pro Gruppe zu erhalten, können Sie einen Self-Join verwenden 

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;

Demo

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

rückkehrergebnis wird sein:

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