Except selects, obwohl man alle Countet

Werbung:
Es ist mir schon fast peinlich, mich bei Joins nicht auszukennen...

aber ja, ich schreibe mal einfach irgendeinen Code mit 3 spalten :/
Code:
select count(maschinen.typ), maschinen_typen.typ, count(maschinen.typ) from maschinen_typen left join maschinen on (maschinen_typen.id = maschinen.typ) group by maschinen_typen.typ

Tut mir ehrlich leid, aber ja, ... :/

Die 3. Spalte hätte ich eben gerne als Count maschinen, gruppiert nach typ, die zurzeit nicht gemietet werden.

EDIT: Ich würde das jetzt enorm inkorrekt lösen, einfach indem ich eine function baue, die freie maschinen zählt, und die als 3. spalte ins select schreiben.

EDIT 2: Ich bin der Meinung, dass ich enorm stolz bin, bisher schon soweit zu sein.
 
Ich bedanke mich hier herzlichst bei DrDimitri, auch wenn ich es bisher nicht geschafft habe xD

Habe ein neues Thema zum durcharbeiten (Subquerys). (Auch ein Like beim entsprechenden Post hinterlassen ;) )

Um das Ganze für alle, die heiß am mitfiebern sind, zu erklären:

1. Code:
Code:
select anzahl.count from (select count(maschinen.id) from maschinen group by maschinen.typ) as anzahl

ist das gleiche wie der 2. Code:
Code:
select * from (select count(maschinen.id) from maschinen group by maschinen.typ) as anzahl

Um ehrlich zu sein Frage ich mich, ob es nicht ein wenig zu komplex wird (ja, ich weiß, man muss das Ganze nur einmal verstehen, dann gehts einfacher), dass man solche Subquerys öfter einsetzt? (Durfte heute nochmal quer durchs Thema Joins arbeiten, und habe was neues ;) )

Wie man das mit Subquerys umfangreicher einsetzen kann, weiß ich noch nicht, aber ja xD
Anbei (für mich jedenfalls) interessante Frage:
Wieviele Subquerys könnten in einer Abfrage stehen? Hatte bisher nur den Fehler, dass eine Subquery nur eine Column returnen kann, aber ja, werde ich wohl noch durch Try and Error in Erfahrung bringen ;)

EDIT: War eine Weile am überlegen, weil ich 3 möglichkeiten, eine Subquery zu verwenden, hier die 3.:
Code:
select count from (select count(maschinen.id) from maschinen group by maschinen.typ) as anzahl
(Bei Methode 3 sollte man aufpassen, dass man nicht mehrere Spalten mit dem gleichem Namen hat)
 
Sodala, kann ich endlich "wieder" in Ruhe schlafen:

DrDimitris und Akretschmers Ideen waren der Weg zum Ziel (Kombination aus beiden):

Ich erstelle mir zuerst eine Funktion, die alle freien Maschinen zählt, indem ich ein "not in" einbaue:
Code:
create or replace function freie_m_nach_typ(x integer) returns table (anzahl bigint) as 'select count(maschinen.id)
from maschinen
where maschinen.id not in (select vermietungen.maschinen_id from vermietungen where mietzeit @> now()::timestamp) and maschinen.typ = x group by maschinen.typ'
language sql

Mein Herz hat schneller geschlagen, wie ich am versuchen war, Aufgrund von starken missvertrauen meiner Fähigkeiten (lol), aber jetzt kann ich wieder lachen, hier die Abfrage (wie sie in meiner Datenbank eingesetzt werden kann):
Code:
select count(maschinen.id), maschinentypen.typ, freie_m_nach_typ(maschinen.typ) from maschinen inner join maschinentypen on (maschinentypen.id = maschinen.typ) group by maschinentypen.typ, maschinen.typ

Von dem her, ich bedanke mich bei beiden von euch ;)
Und danke, dass ihr mich hier toleriert, weil ich denke ja auch nicht immer der einfachste bin, weil ich nur kurzschlüssige, aber auch effektive und nicht in frage zu stellende Antworten gebe, wie "geht nicht"... ;)

Akretschmer meinte, ich sollte das not in nutzen.
DrDimitri meinte, ich brauche dazu eine weitere Funktion.

Achso ja, ich habe ja SSH-Zugriff auf den externen Server :D, hier (um anzugeben) die Ausgabe von Putty:
Code:
count |  typ  | freie_m_nach_typ
-------+-------------------+------------------
  1 | Coverlockmaschine |  1
  1 | Stickmaschine  |  1
  2 | Overlockmaschine  |  2
  3 | Mitgebrachte  |  3
  4 | Haushaltsmaschine |  3
(5 rows)

Und ja, ich habe auch nur 1 Maschine des Typs Haushaltsmaschine in Vermietungen eingetragen (von 1.1.18 00:00 bs 31.12.18 23:59) ;)

EDIT: Habe ein Where in der SubQuery der Function vergessen, bessere ich mal aus ;D
Ich hoffe, nicht über Steine zu stolpern :S
 
Zuletzt bearbeitet:
[QUOTE="Kampfgummibaerlie, post: 26813, member: 3113]
DrDimitri meinte, ich brauche dazu eine weitere Funktion.[/QUOTE]
Das hab ich nie gesagt.
 
Werbung:
Zurück
Oben