2012-04-04 9 views
0

Ich habe eine Tabelle student_table mit zwei Spalten student_name (mit uniqe constraint), student_marks. Aus dieser Tabelle muss ich den Rekord des Schülers ermitteln, der die dritthöchsten Noten hat.Abfrage, um die dritthöchsten Noten zu bekommen

Ich habe versucht, aber es ist falsch:

select * from student_table orderby(marks) enum(marks)=3; 

Wie korrigiere ich diese Abfrage?

+0

ist student_name einzigartig? hast du mehrere Noten für 1 Schüler? –

+0

Wie möchten Sie mit Verbindungen umgehen, wenn erlaubt? Z. B. haben zwei Studenten Noten von 100, drei haben Marken von 98 und fünf haben Marken von 95? – pilcrow

Antwort

1
select * from students_table orderby marks limit 2,1 

Überprüfen Sie diesen Link, um mehr über Limit http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

+1

Wählen Sie * aus Student_Tabelle Sortieren nach (Marken) Limit 2,3; – user1308308

+0

Danke, kannst du die Antwort erklären. – user1308308

+0

können Sie durch URL gehen, die ich in meiner Antwort gegeben habe –

1

In MySQL können Sie tun:

SELECT * FROM Student_Table ORDER BY Marks LIMIT 2, 1 
+0

Danke für Ihre Antwort, es gibt 3 Datensätze nicht der dritte Datensatz? Ich brauche nur den dritten Datensatz zu bekommen. – user1308308

+0

kann ich eine andere lösung mit out Limit verwenden .. – user1308308

+0

Es Ergebnis leeren Datensatz ... – user1308308

3

Wenn Sie nur den dritten Datensatz wollen:

SELECT * FROM student_table ORDER BY marks DESC LIMIT 2,1 

eine Lese haben über den LIMIT Befehl.

5

Hier ist eine sehr einfache Lösung

select * 
from marks 
order by marks desc 
limit 2,1 

Begrenzung Sie Offset und Länge verwenden können. Hier wird der Offset auf zwei gesetzt, weil er bei 0 beginnt. Für den dritten Datensatz. Und 1 ist die Grenze.

ist hier eine andere Lösung

$res=mysql_query("SELECT * from marks order by marks desc"); 
mysql_data_seek($res, 2); 
$row=mysql_fetch_assoc($res)); 
4

Versuchen Sie, diese

SELECT * FROM `student_table` ORDER BY marks DESC LIMIT 2,1 
0

Die folgende Abfrage wird alle Datensätze für Studenten auf dem dritten Platz zurückkehren, unabhängig davon, wie viele Schüler für die erste gebunden sind, zweiten oder dritter Platz.

SELECT student_table.name, student_table.marks 
    FROM student_table 
WHERE student_table.primary_key IN ( SELECT ranked.primary_key 
              FROM student_table ranked 
            LEFT JOIN student_table others 
               ON ranked.marks < others.marks 
             GROUP BY 1 
             HAVING COUNT(DISTINCT others.marks) + 1 = 3) 

Zum Beispiel, wenn student_table wie folgt aussieht:

+---------+-------+ 
| name | marks | 
+---------+-------+ 
| Alpha | 100 | 
| Able | 100 | 
| Bravo | 98 | 
| Baker | 98 | 
| Bone | 98 | 
| Charlie | 93 | <-- 3rd place by marks 
| Chimp | 93 | <-- 3rd place by marks 
| Delta | 85 | 
| Echo | 80 | 
| Ebert | 80 | 
+---------+-------+ 

die Abfrage ergeben wird:

+---------+-------+ 
| name | marks | 
+---------+-------+ 
| Charlie | 93 | 
| Chimp | 93 | 
+---------+-------+ 

Als beiseite, würde die Abfrage ein wenig einfacher, wenn MySQL DENSE_RANK unterstützt(), aber Sie können diese Funktion mit Unterabfragen wie oben simulieren.

0

Einsatz unter Abfrage
QUERY: select * from student_table die Markierungen in (Noten von student_table Gruppe auswählen, indem Sie Markierungen, um durch Markierungen ab 2,1 begrenzen);

+0

Lernen [wie Code Block zu verwenden] (http://stackoverflow.com/editing-help) –

Verwandte Themen