Abfrage welcher Wert nur 1 (2,3,...) mal vorkommt
morp
- datenbank
0 steckl0 Vinzenz Mai
Hallo!
Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.
Bin ich da mit "count" auf der richtigen Spur oder total falsch?
Gruß
morp
Hi,
Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.
Bin ich da mit "count" auf der richtigen Spur oder total falsch?
Ich gehe mal von einer SQL aus.
COUNT ist schonmal gut, aber zusätzlich brauchst du noch HAVING.
mfG,
steckl
Hallo,
Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.
Bin ich da mit "count" auf der richtigen Spur oder total falsch?
COUNT ist schonmal gut, aber zusätzlich brauchst du noch HAVING.
Dein Beitrag ist fachlich richtig, die verlinkte Ressource eine Katastrophe und nicht empfehlenswert. GROUP BY ist *nicht optional*, sondern zwingend vorgeschrieben (außer bei der kaputten MySQL-Implementierung, die für genug Ärger sorgt).
Viel besser ist Danielas Artikel in SELFHTML aktuell:
Datensätze gruppieren mit SQL.
Freundliche Grüße
Vinzenz
Hallo!
Besten Dank schon mal für die Antworten, leider fehlt mich noch der letzet Anstoß, bin leider blutiger Anfänger...
Also, ich habe in etwa folgende Tabelle (tbl_lage)
ID; xx
1; 1
1; 2
1; 4
2; 1
2; 3
2; 4
3; 1
3; 3
3; 4
Als Antwort möchte ich einfach die '2' haben, da es der einzige Wert ist der nur einmal vorkommt (oder eben die '3' da nur sie genau zweimal vorkommt).
Und statt '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.
Wie gesagt, leider bekomme ich die korrekte mySQL Abfrage nicht hin.
Vielen Dank!
morp
Was für Früchte haben denn deine Bemühungen bisher hervorgebracht, sprich: Was für SQL hast du denn bisher produziert?
Ciao, Frank
Hallo,
Also, ich habe in etwa folgende Tabelle (tbl_lage)
ID; xx
1; 1
1; 2
1; 4
2; 1
2; 3
2; 4
3; 1
3; 3
3; 4
Als Antwort möchte ich einfach die '2' haben, da es der einzige Wert ist der nur einmal vorkommt (oder eben die '3' da nur sie genau zweimal vorkommt).
Du möchtest also folgendes:
Gib mir die Werte
der Spalte xx und
die Anzahl, wie oft dieser Wert vorkommt
Es ist klar, dass es für jeden Wert der Spalte xx nur einen Datensatz geben darf (Du willst ja nicht dreimal angezeigt bekommen, dass der Wert 4 dreimal vorkommt). Somit kommen wir zu:
SELECT -- Gib mir die Werte
xx, -- der Spalte xx und
COUNT(xx) Anzahl -- die Anzahl, wie oft dieser Wert vorkommt
GROUP BY -- und nur eine Zeile für jeden unterschiedlichen Wert
xx -- der Spalte xx
Mit der HAVING-Klausel die gewünschten Zeilen auszufiltern, dürfte Dir nicht schwer fallen, dafür hast Du bereits Links auf erläuternde Artikel erhalten.
Und statt '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.
Dazu benötigst Du einen Join. Lesetipps zu Joins habe ich selbstverständlich auch, schließlich haben wir in SELFHTML aktuell gleich zwei Artikel dazu:
- Einführung in Joins
- Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz
Hallo Ingrid,
Also, ich habe in etwa folgende Tabelle (tbl_lage)
die Du vergessen hast ;-)
Du möchtest also folgendes:
Gib mir die Werte
der Spalte xx und
die Anzahl, wie oft dieser Wert vorkommt
aus der Tabelle
tbl_lage
So ist's besser.
Es ist klar, dass es für jeden Wert der Spalte xx nur einen Datensatz geben darf (Du willst ja nicht dreimal angezeigt bekommen, dass der Wert 4 dreimal vorkommt). Somit kommen wir zu:
SELECT -- Gib mir die Werte
xx, -- der Spalte xx und
COUNT(xx) Anzahl -- die Anzahl, wie oft dieser Wert vorkommt
FROM -- aus der Tabelle
tbl_lage -- tbl_lage
GROUP BY -- und nur eine Zeile für jeden unterschiedlichen Wert
xx -- der Spalte xx
Und die Moral von der Geschicht': Poste ungetesten Code nicht ...
Freundliche Grüße
Vinzenz
yo,
Und statt '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.
sieht wohl so aus, als wenn du unterabfragen anstelle von GROUP BY und HAVING brauchst. welches dbms und welche version verwendest du den, welche tabellen sollen da alle mit rein und wie genau sehen die tabellen aus ?
Ilja
yo Vinz,
Dein Beitrag ist fachlich richtig, die verlinkte Ressource eine Katastrophe und nicht empfehlenswert. GROUP BY ist *nicht optional*, sondern zwingend vorgeschrieben (außer bei der kaputten MySQL-Implementierung, die für genug Ärger sorgt).
der beitrag ist ganz ok, group by ist optional, probier es aus. in aller regel wollen die meisten auch mehr spalten ausgeben, als nur die der gruppierung, desegen werden wohl unterabfragen zum tragen kommen, aber das ist offen, was genau er sucht.
Ilja
Mahlzeit Ilja,
group by ist optional, probier es aus.
In welchem Datenbanksystem mit welcher Version?
MfG,
EKKi
In welchem Datenbanksystem mit welcher Version?
Oracle 10g
Ilja
Mahlzeit Ilja,
In welchem Datenbanksystem mit welcher Version?
Oracle 10g
Tabelle:
ID | Nachname | Vorname
---+----------+--------
...
SELECT t.Nachname
, COUNT(t.ID) AS Anzahl
FROM Tabelle t
ORA-00937: keine Gruppenfunktion für Einzelgruppe
SELECT t.Nachname
, t.Vorname
, COUNT(t.ID) AS Anzahl
FROM Tabelle t
GROUP BY t.Nachname
ORA-00979: Kein GROUP BY-Ausdruck
SELECT * FROM v$version
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bi
Und jetzt behaupte bitte noch einmal, dass es NICHT notwendig ist, innerhalb der GROUP BY-Anweisung alle Spalten anzugeben, die nicht durch irgendeine Gruppierungs- oder Aggregatsfunktion behandelt werden ...
MfG,
EKKi
Hello,
Und jetzt behaupte bitte noch einmal, dass es NICHT notwendig ist, innerhalb der GROUP BY-Anweisung alle Spalten anzugeben, die nicht durch irgendeine Gruppierungs- oder Aggregatsfunktion behandelt werden ...
ich misch mich ungerne ein, aber war die Aussage nicht lediglich, dass HAVING kein GROUP BY erfordert?
MfG
Rouven
yo,
ich misch mich ungerne ein, aber war die Aussage nicht lediglich, dass HAVING kein GROUP BY erfordert?
genauso ist es Rouven. ich denke mal er hat es mit dem mysql bug durcheinander gebracht, spalten innerhalb einer gruppierung anzeigen zu können, die nicht in der grup by klausel enthalten sind und keine aggregat-funktion verwenden. aber das ist in diesem thread nicht das thema, sondern das man HAVING auch ohne GROUP BY klausel verwenden kann.
Ilja