SQL ordnen nach zueinander in Verhältnis gesetzten Spaltenwerten

Felix

Bekanntes Mitglied
Hallo,

ich möchte gerne meine SQL-Ausgabe nach Verhältnissen der Spaltenwerte ordnen. Ich hab mir da mal einen Befehl überlegt, der aber nicht funktioniert. Es gibt zwar keinen Syntaxfehler, aber er macht auch nicht das was ich will:

Java:
SELECT * from Database ORDER BY ((knowngf + knownfg)/(knowngf + unknowngf + knownfg + unknownfg))

knownfg, knowngf, unknownfg und unknowngf sind die Spalten. Sie enthalten jeweils einen smallint Wert. Es soll also nach Prozentsätzen der gewussten in Verhältnis zu den gesamten Werte geordnet werden. Es entsteht aber eine scheinbar willkürliche Ausgabe.

Ich verwende PostgreSQL.

Grüße
Felix
 
G

Gast2

Gast
Schon mal in einem Subselect probiert?

Code:
SELECT * FROM (
    SELECT *, ((knowngf + knownfg)/(knowngf + unknowngf + knownfg + unknownfg)) AS sortkey from Database) ORDER BY sortkey
 

Felix

Bekanntes Mitglied
Danke für die Antwort. Ich hab den Code eingebaut. Aber es kommt ein PSQL-Error:

org.postgresql.util.PSQLException: FEHLER: Unteranfrage in FROM muss Aliasnamen erhalten
Hinweis: Zum Beispiel FROM (SELECT...) [AS] xyz.

Aber so wie im Bsp. steht das doch da, oder?

Grüße
 
S

SlaterB

Gast
du hast 'AS sortkey' für ein paar verrechnete Attribute, aber die gesamte Unterquery
(SELECT *, ((knowngf + knownfg)/(knowngf + unknowngf + knownfg + unknownfg)) AS sortkey from Database)
hat keinen Namen, das muss

(SELECT *, ((knowngf + knownfg)/(knowngf + unknowngf + knownfg + unknownfg)) AS sortkey from Database) as dbExtra
oder ähnlich lauten
 

Felix

Bekanntes Mitglied
Hi, danke, jetzt funktioniert die Datenbankabfrage ohne Error. Aber er sortiert immer noch nicht richtig...
So kommt zB 0.94 vor 0.875. Was allerdings super funktioniert, ist, dass alle Werte 1.0 (höchster zu erreichender Wert) am Ende stehen.

Ich gebe die Werte so aus:
Java:
System.out.println(((double)knownGF + (double)knownFG)/((double)knownFG + (double)knownGF + (double) unknownFG + (double) unknwonGF));
Rundet der Datenbankserver vllt anders? Oder geht er anders mit der konvertierung von int zu double um?
 
G

Gast2

Gast
Also das Ergebniss ist:
Code:
0.94
...
0.875
...
1.0

Sind denn die rows zwischen 0.94 und 0.875 absteigend sortiert?
 

Felix

Bekanntes Mitglied
Nein, das auch nicht. Es lässt sich kein System erkennen. Ich kann leider nicht von Netbeans in Firefox kopieren, aber ich hab jetzt mal die ersten paar Zahlen abgetippt:

0.3333333333333333
0.94
0.875
0.9666666666666667
0.9523809523809523
0.7948717948717948
0.8181818181818182
...
1.0

Kann es vllt. am Code liegen? Er lautet:

Java:
else if (interrogationmode == Interrogation.SORTED_BY_MEASURE) {
    resultset = statement.executeQuery("SELECT index, box, germanimport, foreignimport, knowngf, unknowngf, knownfg, unknownfg, lastinterrogation, apposition FROM (SELECT index, box, germanimport, foreignimport, knowngf, unknowngf, knownfg, unknownfg, lastinterrogation, apposition, ((knowngf + knownfg)/(knowngf + unknowngf + knownfg + unknownfg)) AS sortkey from \"" + dbconnection.getDatabase() + "\") as DBExtra ORDER BY sortkey");
}
 
G

Gast2

Gast
Was für einen Datentyp haben denn die Spalten?

Ich habe mal eben eine Tabelle mit numeric(18,9) angelegt und order by soriert wie es soll

SELECT * FROM test
col1
0.213300000
0.433000000
0.910000000
0.721000000
1.000000000
0.125000000
0.367000000
0.102000000
0.209000000

SELECT * FROM (select col1, (col1* 0.25) as x from test) as y order by y.x
col1 ;x
0.102000000;0.02550000000
0.125000000;0.03125000000
0.209000000;0.05225000000
0.213300000;0.05332500000
0.367000000;0.09175000000
0.433000000;0.10825000000
0.721000000;0.18025000000
0.910000000;0.22750000000
1.000000000;0.25000000000
 

Felix

Bekanntes Mitglied
Die Spalten sind vom Typ smallint. Die Datenbank die ich verwende ist ja PostgreSQL. Könnte es daran liegen, dass es nicht funktioniert?
Wenn ich nach knowngf*0.25 ordnen lasse, ist bei mir auch alles richtig geordnet. Könntest du mal versuchen zwei Werte in Verhältnis zu setzen und danach ordnen zu lassen?
 
S

SlaterB

Gast
spannender ist schon, was bei dir passiert,
selektiere doch auch den sortkey und gib den aus,

ob du den in deinen manuellen Rechnungen richtig ausgibst kann man kaum überprüfen,
arbeite dich langsam vor, erstmal nur zwei Werte verrechnen, DB-Sortierung mit eigenen Zahlen vergleichen, dann 3 Werte usw.
 
G

Gast2

Gast
Die Spalten sind vom Typ smallint. Die Datenbank die ich verwende ist ja PostgreSQL. Könnte es daran liegen, dass es nicht funktioniert?

Ja, daran liegt das. Wenn die Spalten vom Typ smallint sind wird bei einer arithmetischen Operation immer auf den besten smallint "gerundet", d.h. du sortierts nur 0 oder 1

z.B. Berechnugn mit smallint Spalten:
Code:
CREATE TABLE test
(
  col1 smallint,
  col2 smallint,
  col3 smallint
)

insert into test VALUES(1,3,5);
insert into test VALUES(2,7,9);
insert into test VALUES(3,1,3);
insert into test VALUES(9,2,5);
insert into test VALUES(2,7,3);
insert into test VALUES(6,9,3);

select * from test
1;3;5
2;7;9
3;1;3
9;2;5
2;7;3
6;9;3

select col1 / col2 * col3 as ergebnis from test
0
0
9
20
0
0

select * from (select col1 / col2 * col3 as sortkey from test) as calc order by calc.sortkey
0
0
0
0
9
20

und Berechnung mit numeric(18,9) Spalten
Code:
CREATE TABLE test2
(
  col1 numeric(18,9),
  col2 numeric(18,9),
  col3 numeric(18,9)
)

insert into test2 VALUES(1,3,5);
insert into test2 VALUES(2,7,9);
insert into test2 VALUES(3,1,3);
insert into test2 VALUES(9,2,5);
insert into test2 VALUES(2,7,3);
insert into test2 VALUES(6,9,3);

select * from test2
1.000000000;3.000000000;5.000000000
2.000000000;7.000000000;9.000000000
3.000000000;1.000000000;3.000000000
9.000000000;2.000000000;5.000000000
2.000000000;7.000000000;3.000000000
6.000000000;9.000000000;3.000000000

select col1 / col2 * col3 as ergebnis from test2
1.66666666666666666665000000000
2.57142857142857142861000000000
9.0000000000000000000000000
22.5000000000000000000000000
0.85714285714285714287000000000
2.00000000000000000001000000000


select * from (select col1 / col2 * col3 as sortkey from test2) as calc order by calc.sortkey
0.85714285714285714287000000000
1.66666666666666666665000000000
2.00000000000000000001000000000
2.57142857142857142861000000000
9.0000000000000000000000000
22.5000000000000000000000000
 
Zuletzt bearbeitet von einem Moderator:

Felix

Bekanntes Mitglied
Ahh, ok vielen Dank, das war sehr anschaulich! Ich hab jetzt die Spaltenart auf Numeric geändert und es funktioniert super.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Dupel in einer Tabelle ordnen Datenbankprogrammierung 6
V mysql - tree auslesen und richtig ordnen Datenbankprogrammierung 4
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
J Sql Anfrage nach einer Zeile beenden Datenbankprogrammierung 6
ruutaiokwu SQL-Dump nach MariaDB laden? Datenbankprogrammierung 6
T JPA: Nach String statt Primärschlüssel suchen Datenbankprogrammierung 9
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
M SQLite Suche nach String Datenbankprogrammierung 4
G PostgreSQL Nach Monaten auf einmal ClassNotFound-Exception Datenbankprogrammierung 3
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
J SQLite Datenverlust nach beenden des Programmes Datenbankprogrammierung 21
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
B Leerzeichen nach Umlaut -> Sichtbar erst nach Query! Datenbankprogrammierung 6
D Zeit von SQL nach Java Datenbankprogrammierung 2
M DB-Zugriff funktioniert nach JAR-Erstellung nicht mehr Datenbankprogrammierung 3
AssELAss Oracle Suche nach Umlauten Ä und Ae ermöglichen Datenbankprogrammierung 11
G HSQLDB Inserts/Updates sind nach Neustart der Anwendung Datenbankprogrammierung 1
S MySQL Nach wiederholtem Update falsche Werte (im Speicher?) Datenbankprogrammierung 1
Z PDF nach Formate sortieren Datenbankprogrammierung 3
A Nach Export mysql Verbindung zur Datenbank nicht möglich, was tun? Datenbankprogrammierung 7
F Java SQL Syntax Error erst nach mehrmaligen Aufrufen Datenbankprogrammierung 3
R vor/nach INSERT mysql-SETS absetzen Datenbankprogrammierung 2
C Programm wird nach DB-Eintrag nicht weitergeführt Datenbankprogrammierung 5
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
P MySQL Verbindung nach außen sehr langsam Datenbankprogrammierung 4
S Nochmals: ID ermitteln nach Insert Datenbankprogrammierung 2
P JPA- Entities bleiben nach dem Löschen (unsichtbar?) in der Datenbank Datenbankprogrammierung 6
GianaSisters MS SQL unter Netbeans OK - nach konvertieren Absturz Datenbankprogrammierung 6
R SQL Abfrage, je nach ausgewählten Parametern Datenbankprogrammierung 11
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
M Datenbankeintrag bleibt nach Löschen in JSP vorhanden Datenbankprogrammierung 8
0 Filtern nach mehreren Kriterien Datenbankprogrammierung 4
T filtern nach expliziten Worten trotz LIKE '%Wort%' Datenbankprogrammierung 2
E Nach Server wechsel Datenbank fehler ?!? Datenbankprogrammierung 3
J SQL: Sortierung nach Wortlänge Datenbankprogrammierung 2
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
T JPA: NullPointerException nach persist Datenbankprogrammierung 3
T Eintragung in einer Spalte nach Abfrage Datenbankprogrammierung 11
E Hibernate Session closed nach Transaction commit? Datenbankprogrammierung 7
K Rundungsfehler bei Gleitkommazahlen von Java nach SQL Datenbankprogrammierung 2
B Spaltennamen von MySQL Datenbank nach Java auslesen Datenbankprogrammierung 10
alexpetri Problem mit jdbc MS Access / nach 670 inserts ist schluss. Datenbankprogrammierung 4
tfa Apache DBCP: Reconnect nach Timeout? Datenbankprogrammierung 3
M mySQL zugriff funktionert nach ca4 stündiger laufzeit nicht Datenbankprogrammierung 6
G Hilfe: Werte sind alle x2 (oder mehr) nach JOIN Datenbankprogrammierung 13
M sql-code für suche in tabelle nach höchster transaktionsnr Datenbankprogrammierung 12
T ibatis + "generated p-key" nach insert? Datenbankprogrammierung 24
G Herausfinden des Primary Keys nach INSERT-Kommando? Datenbankprogrammierung 4
T Tabellen aus Datenbank 1 nach Datenbank 2 Datenbankprogrammierung 2
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
G Suchen nach Autowerten in Access-DB Datenbankprogrammierung 20
D JAVA hängt nach SQL Abfrage Datenbankprogrammierung 7
I Nach export zur .jar keine verbindung mehr Datenbankprogrammierung 7
M Datenbankverbindung bricht nach ca. 12 Stunden Verbindung ab Datenbankprogrammierung 3
R Nach String in MySQL datenbank suchen Datenbankprogrammierung 7
M Daten von MySQL nach MSSql probleme beim schreiben Datenbankprogrammierung 3
G File nach Blob konvertieren ? Datenbankprogrammierung 6
M Abfrage trennt Ergbnis eines Atrributes nach den Leerzeichen Datenbankprogrammierung 4
F Treiber nachladen oder nach Bedarf Datenbankprogrammierung 4
P Primärschlüssel direkt nach der Eingabe wieder auslesen Datenbankprogrammierung 7
R MySQL Syntax für suche nach Textteil Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben