Hallo henric,
war doch Betriebsblindheit!
SELECT count(*) AS number,
filename
FROM Midifan.Midi
GROUP BY filename
HAVING count(*) > 1
ORDER BY count(*) DESC;
wie auch
SELECT filename
FROM Midifan.Midi
GROUP BY filename
HAVING count(*) > 1;
funktioniert einwandfrei. Wobei die Schreibweise count(*) für mich schon etwas eigenartig ist, aber auch die Schreibeweise count(filename) funktioniert.
Dann wird das ganze mit
SELECT *
FROM Midifan.Midi
GROUP BY filename
HAVING count(filename) > 1;
und der Fehlermeldung
ERROR: column "midi.titel" must appear in the GROUP BY clause or be used in an aggregate function
wieder unverständlich, weil nach dem folgeden verlangt wird
SELECT *
FROM Midifan.Midi
GROUP BY filename,
titel,
artist
HAVING count(filename) > 1;
und sich count(…) default mäßig immer auf den ersten Eintrag von GROUP BY bezieht. Die Sortierung nach “titel” und “artist” ist weder verlangt noch notwendig und kostet nur Zeit. Hier kann man PostgreSQL also noch optimieren!
Zu Deiner Frage: “Midifan” ist das SCHEMA, in der die TABELLE “Midi” angelegt wurde.
Hier noch Kode zum Testen:
-- DROP TABLE midifan.midi;
CREATE TABLE midifan.midi
(
filename VARCHAR(100) NOT NULL,
titel VARCHAR(100) DEFAULT NULL,
artist VARCHAR(100) DEFAULT NULL
);
INSERT INTO midifan.midi VALUES ('A0.mid', '0', '3');
INSERT INTO midifan.midi VALUES ('A1.mid', '1', '4');
INSERT INTO midifan.midi VALUES ('A1.mid', '1', '4');
INSERT INTO midifan.midi VALUES ('A2.mid', '2', '5');
INSERT INTO midifan.midi VALUES ('A2.mid', '2', '5');
SELECT filename
FROM midifan.midi
GROUP BY filename
HAVING count(*) > 1;
SELECT *
FROM midifan.midi
GROUP BY filename,
titel,
artist
HAVING count(filename) > 1;
Wenn Du “midifan.” aus dem Kode ersatzlos löscht, wird die Tabelle im Schema “public” angelegt.
mfg
fristo