Ergebnis 1 bis 2 von 2

Thema: Bestes Ergebnis aus einer Tabelle Filtern?

  1. #1
    Nils ist offline Neuer Benutzer
    Registriert seit
    11.05.2007
    Beiträge
    2

    Standard Bestes Ergebnis aus einer Tabelle Filtern?

    Huhu,

    gehoere zu den Postgre Neueinsteigern. Sitze hier gerade bei der Arbeit und soll ein mehr oder minder großes Projekt nach CSharp/ASP.Net portieren.

    Im Folgendenden erklaere ich die Situation.

    Das Ganze ist ein Mathe-Lern-Programm fuer Grundschulen, es werden 30 Fragen gestellt, [(Ausgewertet) ...] und werden dann am Ende in einer High-Score Liste eingetragen.

    Die Tabelle, "sessions" sieht bei mir momentan so aus:



    Code:
    session_id   answered_right   answered_wrong   start_time   end_time user_id
    155          30               0                11:36:40     11:37:10 3
    156          30               0                12:22:00     12:23:00 3       
    157          29               1                12:54:12     12:57:14 6
    Mein Query fuer die Highscoreliste sieht folgendermaßen aus:

    Code:
    cmd.CommandText = "SELECT answered_right, answered_wrong, start_time, end_time, users.login_name AS login_name FROM sessions INNER JOIN users ON users.user_id=sessions.user_id WHERE 1=1 ORDER BY answered_right DESC, (end_time - start_time) ASC";
    Funktioniert, wunderbar sogar! Allerdings Moechte ich nur das beste Ergebnis outputten (Abhaengig von Zeit / Anzahl Fehlern) - gibt es eine Moeglichkeit dies mittels Postgre zu tun, oder muesste ich dafuer einen Algorithmus schreiben?


    Thanks in Advance,


    Der Postgreneuling

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Nils Beitrag anzeigen

    Funktioniert, wunderbar sogar! Allerdings Moechte ich nur das beste Ergebnis outputten (Abhaengig von Zeit / Anzahl Fehlern) - gibt es eine Moeglichkeit dies mittels Postgre zu tun, oder muesste ich dafuer einen Algorithmus schreiben?

    Der Postgreneuling
    Ja, ja.

    Dich interessiert ja nur nur die User-Id und die Platzierung, oder? Also in etwa sowas, ausgehend von Deinem Bleistift:

    Code:
    test=*# select * from foo;
     id  | a_right | a_wrong |  s_time  |  e_time  | uid
    -----+---------+---------+----------+----------+-----
     155 |      30 |       0 | 11:36:40 | 11:37:10 |   3
     156 |      30 |       0 | 12:22:00 | 12:23:00 |   3
     157 |      29 |       1 | 12:54:12 | 12:57:14 |   6
    (3 rows)
    
    Time: 1.653 ms
    test=*# select uid, max(a_right),  min(e_time-s_time) from foo group by uid order by 1;
     uid | max |   min
    -----+-----+----------
       3 |  30 | 00:00:30
       6 |  29 | 00:03:02
    (2 rows)
    In kurz: Aggregatfunktionen wie max() und min() sowie GROUP BY sind Deine Freunde.
    In lang: Doku lesen ;-)

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 19.04.2011, 03:45
  2. Problem Ergebnis zweier Spalten in einer ausgeben
    Von strippenzieher im Forum Allgemeines
    Antworten: 3
    Letzter Beitrag: 08.04.2011, 22:41
  3. Antworten: 4
    Letzter Beitrag: 01.03.2011, 12:05
  4. Frage Ergebnis einer Datenbankabfrage
    Von olli666 im Forum SQL
    Antworten: 8
    Letzter Beitrag: 06.07.2009, 09:12
  5. Problem ResultSet-Ergebnis mit INSERT in Tabelle schreiben
    Von Scheff im Forum Programmierung
    Antworten: 9
    Letzter Beitrag: 03.07.2008, 14:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum