2017-12-06 1 views
1

Ich versuche, die max (CRN) mit einer Gruppe von Funktion abrufen abgesehen von CRN abzurufen doppelte Datensätze, aber es funktioniert nicht: unter meiner select-Anweisung ist:Gruppe von mit MAX in SQL

select max(CRN), TERM, SUBJECT, COURSE, SCH, R_KEY, R_PERC 
    from database 
    group by  TERM, SUBJECT, COURSE, SCH, R_KEY, R_PERC 

unten ist meine Eingabedatei:

CRN TERM SUBJECT COURSE SCH R_KEY R_PERC 
10607  10 DGRG 230 K 36714 37 
10607  10 DGRG 230 K 36715 38 
11658  10 MATH 101 E 213162 100 
11658  10 MATH 101 L 182471 100 
12811  10 MHRM 310 L 32951 50 
12811  10 MHRM 310 L 130923 50 
12879  10 MHRM 310 L 32738 50 
12879  10 MHRM 310 L 32951 50 
12912  10 MHRM 310 L 120641 50 
12912  10 MHRM 310 L 121008 50 

ich die gleichen wie (oben Eingang) unter Ausgang erwarten, weil ich anders „R_PERC“ oder „R_KEY“ habe:

CRN TERM SUBJECT COURSE SCH R_KEY R_PERC 
10607  10 DGRG 230 K 36714 37 
10607  10 DGRG 230 K 36715 38 
11658  10 MATH 101 E 213162 100 
11658  10 MATH 101 L 182471 100 
12811  10 MHRM 310 L 32951 50 
12811  10 MHRM 310 L 130923 50 
12879  10 MHRM 310 L 32738 50 
12879  10 MHRM 310 L 32951 50 
12912  10 MHRM 310 L 120641 50 
12912  10 MHRM 310 L 121008 50 

Aber meine tatsächliche Leistung ist nur ein Datensatz für CRN 12811 wie unten unter Hinweis darauf, dass der Ausgang für alle CRNs ähnlich sein würde (einen Datensatz nur Sinn), wenn wir über Eingabedatei in einer viel größeren Datei Datensatz enthalten:

CRN TERM SUBJECT COURSE SCH R_KEY R_PERC 
10607  10 DGRG 230 K 36714 37 
10607  10 DGRG 230 K 36715 38 
11658  10 MATH 101 E 213162 100 
11658  10 MATH 101 L 182471 100 
12811  10 MHRM 310 L 32951 50 

12879  10 MHRM 310 L 32738 50 
12879  10 MHRM 310 L 32951 50 
12912  10 MHRM 310 L 120641 50 
12912  10 MHRM 310 L 121008 50 
+0

whic h [DBMS] (https://en.wikipedia.org/wiki/DBMS) Produkt verwenden Sie? Postgres? Orakel? "SQL" ist nur eine Abfragesprache, nicht der Name eines bestimmten Datenbankprodukts. –

+0

Eine Tabelle namens Datenbank ... Sehr verwirrend. – jarlh

+0

Es ist Oracle Datenbank – jean

Antwort

1

Fügen Sie die Zählung:

+----------+----------+------+---------+--------+------+--------+--------+ 
| max(CRN) | count(*) | TERM | SUBJECT | COURSE | SCH | R_KEY | R_PERC | 
+----------+----------+------+---------+--------+------+--------+--------+ 
| 10607 |  1 | 10 | DGRG | 230 | K | 36714 |  37 | 
| 10607 |  1 | 10 | DGRG | 230 | K | 36715 |  38 | 
| 11658 |  1 | 10 | MATH | 101 | E | 213162 | 100 | 
| 11658 |  1 | 10 | MATH | 101 | L | 182471 | 100 | 
| 12879 |  1 | 10 | MHRM | 310 | L | 32738 |  50 | 
| 12879 |  2 | 10 | MHRM | 310 | L | 32951 |  50 | <-- your 12811 record is included in here, because both records have the same R_KEY 
| 12912 |  1 | 10 | MHRM | 310 | L | 120641 |  50 | 
| 12912 |  1 | 10 | MHRM | 310 | L | 121008 |  50 | 
| 12811 |  1 | 10 | MHRM | 310 | L | 130923 |  50 | 
+----------+----------+------+---------+--------+------+--------+--------+ 

Diese beiden Datensätze gruppiert erhalten:

+-------+------+---------+--------+------+-------+--------+ 
| CRN | TERM | SUBJECT | COURSE | SCH | R_KEY | R_PERC | 
+-------+------+---------+--------+------+-------+--------+ 
| 12811 | 10 | MHRM | 310 | L | 32951 |  50 | 
| 12879 | 10 | MHRM | 310 | L | 32951 |  50 | 
+-------+------+---------+--------+------+-------+--------+ 
+0

Danke, aber warum Oracle-Datenbank oder MySQL-Datenbank auf diese Weise reagieren; was bedeutet, dass einige Datensätze gelöscht werden, die nicht dupliziert sind? – jean

+0

Sie werden nicht gelöscht. Sehen Sie sich die zweite Tabelle an, die ich beigefügt habe. Sie werden gruppiert und als eine Zeile angezeigt, weil Sie CRN nicht in der Gruppe enthalten haben. 12879 ist größer als 12811, daher wird dies angezeigt, da Sie die Funktion max() verwenden. Das Verhalten ist völlig in Ordnung und korrekt und erwartet. – fancyPants

+0

Danke, es ist jetzt klar – jean