Update

hallo,

erstmal denke ich, dass meine frage kein bestimmtes rdbms betrifft sondern allgemein ist. wenn dem nicht so sein sollte: es ist ein oracle 9…

folgende tabelle:
create table test (test1 int, test char(1));

folgendes statement:

select test1
from test
group by test1
where count(test1) = min(count(test1));

nun zu meinen fragen (leider habe ich hier kein oracle…kann dies also nicht selber probieren):
funktioniert das???
und wenn dies geht, kann man das dann auch als subselect in einem update verwenden (so etwa:
update test
set test2 = ‚y‘
where test1 in (
select test1
from test
group by test1
where count(test1) = min(count(test1)));
)???

vielen dank fuer die hilfe

der jan

hi!

funktionert es? nein

warum: group-function in group-function (count in min-function) ist nicht erlaubt

grüße,
tomh

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

da ich ja nun erfahren habe, dass es nicht funktioniert:
gibt es denn eine moeglichkeit, dies zu loesen??

falls die aufgabe nicht klar ist:
setzte alle test3 auf ‚y‘ wo die anzahl von test1 am kleinsten ist

Keine Ahnung ob das Oracle auch so kann, aber in DB2v7 klappts.

Aufgabe:
Setzte alle Feld2 auf ‚y‘ wo die Anzahl von Feld1 am kleinsten ist

UPDATE TABELLE1 
SET FELD2 = 'Y' 
WHERE FELD1 IN 
 (SELECT FELD1 
 FROM ( SELECT FELD1, COUNT(\*) AS ANZ 
 FROM TABELLE1 
 GROUP BY FELD1) AS T1 
 WHERE T1.ANZ = 
 (SELECT MIN(T2.ANZ) 
 FROM ( SELECT FELD1, COUNT(\*) AS ANZ
 FROM TABELLE1 
 GROUP BY FELD1) AS T2)); 

Besser ist es, voerher eine VIEW anzulegen mit

CREATE VIEW VTABELLE1
AS (SELECT FELD1, COUNT(\*) AS ANZ 
 FROM TABELLE1 
 GROUP BY FELD1)

Dann kann man den Update etwas übersichtlicher definieren:

UPDATE TABELLE1 
SET FELD2 = 'Y' 
WHERE FELD1 IN 
 (SELECT FELD1 
 FROM VTABELLE1 AS T1 
 WHERE T1.ANZ = 
 (SELECT MIN(ANZ) 
 FROM VTABELLE1); 

Gruß,
Darkwing ^v^

is doch quatsch …
Hallo,

select test1
from test
group by test1
where count(test1) = min(count(test1));

Abgesehen davon, dass es nicht geht (was du ja weißt) macht es auch keinen Sinn. Wie würdest du den die WHERE-Klausel lesen ? Ich lese sie so:

„…, aber nur wenn die Anzahl der Nicht-Null Einträge in der Spalte test1 gleich dem kleinsten Wert beim Zählen der Nicht-Null Einträge in der Spalte test1 ist.“

Also quasi: WHERE 1=1

Gruß Janus

PS: Die Reihenfolge der Klauseln in einem SELECT-Statement:

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

Hallo,

select test1
from test
group by test1
where count(test1) = min(count(test1));

Abgesehen davon, dass es nicht geht (was du ja weißt) macht es
auch keinen Sinn. Wie würdest du den die WHERE-Klausel lesen ?
Ich lese sie so:

mir faellt gerade auf, dass das WHERE ein HAVING sein sollte…

„…, aber nur wenn die Anzahl der Nicht-Null Einträge in der
Spalte test1 gleich dem kleinsten Wert beim Zählen der
Nicht-Null Einträge in der Spalte test1 ist.“

un damit sollte dieser punkt auch ein wenig verstaendlicher sein: ich will alle, wo die anzahl der spalte am geringsten ist.

Also quasi: WHERE 1=1

Gruß Janus

gruss jan

PS: Die Reihenfolge der Klauseln in einem SELECT-Statement:

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

jeden kann doch mal ein schreibfehler passieren, oder???

jeden kann doch mal ein schreibfehler passieren, oder???

Du meinst wohl „jedem“ mit „m“.

Kleiner Scherz, wenn ich geahnt hätte, dass es nur ein Schreibfehler war, hätte ich nix gesagt.

Ehrlich.

Gruß Janus