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)));
)???
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);
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:
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:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
jeden kann doch mal ein schreibfehler passieren, oder???