[SQL]Aggregatfunktion 1. Wert der nicht NULL

davidbaumann

Commodore
Registriert
Aug. 2004
Beiträge
4.867
Hallo
Ich habe, als Beispiel, folgende Tabelle:

Code:
ID  USER     ZAHL
-----------------

A   <NULL>     12
A   <NULL>    104
A   David      38
A   Test      154
Meine Abfrage soll so aussehen (die Funktion, die ich suche, nenne ich mal xxx, sie soll mir den 1. Wert von USER ausgeben, der nich NULL ist, also David):

Code:
SELECT ID, xxx(USER), SUM(ZAHL)
FROM Tabelle
GROUP BY ID
Bei Google habe ich leider nichts gefunden...

Danke schonmal,
Gruß David

Edit: Wichtig! Ich brauch die Summe von ZAHL, das ganze will ich ohne Subselect (mit kann ich auch selbst) machen. Ich suche genau das, was ich oben geschrieben habe. Was nicht geht ist "where username not null".
Edit2: Ich benutze den Microsoft SQL Server 2000/20005
 
Zuletzt bearbeitet:
Mach das doch einfach so:
PHP:
SELECT
    *
FROM
    `Tabelle`
WHERE
     `id` IS NOT NULL
GROUP BY `id`
Ungetestet

Grüße

tewes
 
Versuch mal:
Code:
SELECT * 
FROM Tabelle
WHERE User NOT null
Limit 0,1
Evtl. musst du da noch ein wenig finetunen, hab mir das jetzt nur so aus den Fingern gesogen.
 
Hallo tewes, _Vic_
Dann geht mir aber was in der Summe verloren. Dass ich filtern kann, ist mir klar.
Ein Subselect wäre auch möglich, so habe ich es im Moment auch gelöst, aber natürlich wäre mir eine solche Aggregatfunktion recht :)

Gruß
 
Oh, das sieht hier bissl nach lustigem SQL Statesments um sich werfen aus.

Da mach ich mal mit:

SELECT ID, MIN(USER), SUM(ZAHL)
FROM Tabelle
GROUP BY ID
WHERE USER IS NOT NULL;

:D
 
So bekomme ich aber wieder nur die Summe von Zeilen wo ein Username drin steht, ich brauche aber die Summe aller Werte!
 
Ich glaube deine Problemstellung ist ein wenig irreführend beschrieben:
Zuerst sagst du:
die Funktion, die ich suche, nenne ich mal xxx, sie soll mir den 1. Wert von USER ausgeben, der nich NULL ist, also David
Auf einmal kommt eine unkonkrete Summe ins Spiel:
Dann geht mir aber was in der Summe verloren...
Und nu heißt es auf einmal
ich brauche aber die Summe aller Werte

Es wäre also praktisch, wenn du deine Problemstellung vollständig angeben könntest...

Edit:
OK, sehe, dass du das jetzt gemacht hast
 
Hm, ich bin mir nicht sicher ob ich so ganz genau verstanden hab, was du willst:
Eine Tabelle mit den Spalten ID, User und "Zahlensumme". Für jede ID gibt es genau eine Zeile. Bei "User" steht in der Zeile der erste nicht-null-Wert aus der Original-Tabelle, und bei Zahlensumme steht die Summer aller Zahlenwerte für diese ID aus der Originaltabelle, auch die Zeilen wo der User null ist.
So richtig?

Edit: Also in deinem kurzen Beispiel mit 4 Zeilen wäre das Ergebnis dann eine Tabelle mit einer Zeile: "A David 308" ?
 
Villeicht nochmal, das Ergebnis das ich erwarte:

ID + 1. Wert von Username der nicht NULL + Summe von ZAHL

Gruß

Edit: also das was Anub1s schreibt...
 
Das wird wohl mit einem einzelnen Statement nicht funktionieren, da Du als Ergebnis zwei verschiedene Datenmengen benötigst, einmal die Summe über alle Zahlen und dann nur Datensätze in denen ein Username eingetragen ist.
Da bleibt meiner Meinung nach nur der Sub Select, da zwei verschiedene Selects nötig sind.
 
Naja, es muss mir ja, ähnlich wie sum, nur einige Datensätze zusammenfügen (ähnlich wie, min, max, sum...).
Aus diesem Grund hätte ich da eine passende Aggregatfunktion erwartet...

Gruß
 
davidbaumann schrieb:
Naja, es muss mir ja, ähnlich wie sum, nur einige Datensätze zusammenfügen (ähnlich wie, min, max, sum...).
Aus diesem Grund hätte ich da eine passende Aggregatfunktion erwartet...

Du mußt angeben auf was die Funktion angewendet wird, das ist in deinem Fall das Problem.
Ein Select = eine Ergebnismenge
 
7H3 N4C3R schrieb:
Ein MIN oder MAX sollte es doch schon genau tun, oder nicht?
Ja, tut es.

Code:
SELECT ID, min(USER), sum(ZAHL)
  FROM tabelle
 GROUP BY ID;
liefert genau das, was du willst, in diesem Beispiel den USER David und als Summe 308.
 
Aber das liefert nicht immer den ersten Eintrag für den User der nicht Null ist, oder?
In diesem Beispiel paßt das, da "David" vor "Test" kommt. Aber wenn die Reihenfolge andersrum in der Tabelle wäre, dann würde als Ergebnis auch "David" herauskommen, obwohl der erste User<>Null dann "Test" ist.

Weiß nicht ob das wirklich so gemeint ist, ist mir nur aufgefallen :confused_alt:
 
Ja genau das dachte ich mir auch... werde wohl doch nicht um ein Subselect rumkommen :)
Wobei das Problem in diesem Fall schon gelöst ist. Wissen kann man aber immer gebrauchen :)

Gruß
 
Zurück
Oben