1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Funktionen hintereinanderschalten (Durch Try and Error draufgekommen (Lösung enthalten))

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Kampfgummibaerlie, 19 Mai 2017.

  1. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Ich glaube der Ttel erklärt alles, ich würde gerne mehrere Funktionen "hintereinander" abspielen.

    Irgendetwas wie:
    Function 1 multipliziert x mit 2 (Beispiel)
    Function 2 dividiert x durch 3 (Beispiel)

    gibt es eine Art, die aussieht wie: select function2(function1(x))

    Mein gewolltes Ziel:
    Ich will einen Wert x angeben, diesen dann mit 2 multiplizieren, und den hochmultiplizierten Wert durch 3 teilen.

    Könnte für den einen oder anderen interessant sein ;)

    LÖSUNG HIER:

    Ich habe das oben beschriebene Szenario umgesetzt, und ja, es funktioniert über eine drtte funktion.

    Function zum verdoppeln:
    Code:
    CREATE FUNCTION verdoppeln (x numeric) RETURNS numeric AS 'SELECT (x*2)' LANGUAGE sql STRICT IMMUTABLE;
    
    Function zum dritteln der verdoppelten Zahl:
    Code:
    CREATE FUNCTION verdoppeln_und_dritteln (x numeric) RETURNS numeric AS 'SELECT (verdoppeln(x)/3)' LANGUAGE sql STRICT IMMUTABLE;
    
    Um das ganze zu probieren:
    Code:
    select verdoppeln_und_dritteln(15)
    
    Ergebniss ist 10
     
  2. ukulele

    ukulele Datenbank-Guru

    Warum geht denn "select function2(function1(x))" nicht? Das wundert mich etwas...
     
  3. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    würde, glaube ich auch gehen, aber ich will am "mühseeligen" Tippen der 2 Functions sparen ;)
    Von daher, rufe ich beide zeitgleich ab, ohne beide einzutippen.

    Und ich glaube, es wird irgendwann eine Datenbank so groß, dass das eintippen von mehr als nur 2 Funktionen in richtiger reihenfolge ernsthaft mühselig werden würde.
     
    Zuletzt bearbeitet: 19 Mai 2017
  4. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Habe hier wiederum eine zugehörige Frage:

    Würde es Sinn machen, bei einer >Preisrechnung< X Functions eben so wie oben beschrieben hintereinanderzuschalten?

    Beispiel:
    Ich kaufe einen Fernseher im Ausland, transportiere ihn nach Wien, liefere ihn zum Wohnungshaus, Trage den Fernseher in die Wohnung, montiere ihn an der Wand, richte die Sprache auf Deutsch, starte den Sendersuchlauf, Kilometergeld, Steuergeld, Zuschlagsgeld (falls vorhanden), und was weiß ich was....

    Nachdem ja nicht überall die "Gewinnverhältnisse" gleich sind, glaube ich, würde es durchaus Sinn machen, mehrere hintereinander zu schalten.

    Insbesondere, falls die einzelnen Functions abhängig von irgendwas sind, wie zum Beispiel:
    Den Fernseher in den 4. Stock tragen ohne Lift (pro Stockwerk eine höhere Steigerung als für den vorigen (1. Stock 0,2€, 2. Stock 0,7€, 3. Stock 1,3€ 4. Stock 1,9€)

    Den Fernseher aus Russland holen, und nicht gerade aus Rumänien (100km Autofahrt 1%, 200km Autofahrt gleich 3%, und so weter...)

    Das Zuschlagsgeld ist für Fernseher (glaube ich) nicht vorhanden, aber zB Zigaretten aus dem Ausland abholen, oder so.... (Ich glaube, da muss man an der Grenze zahlen, damit man die mit ins Land bringen darf (?))
    Ich glaube, die wären dann zusätzliche Kosten (weil ndividueller Preis), ich transportiere selten Sachen aus dem Ausland heim ^^

    und ja, wenn ich in dem Ausmaß eine ordentliche Datenbank schrauben wollen würde, was jedoch nicht der Fall ist, glaube ich, würde ich die Funktionen hintereinanderschalten....

    Deshalb hoffe ich mal schwer, dass hier im Forum ein Geschäftsmann ist, der mir das klar beantworten kann... (Ich würde es jedenfalls so aufbauen, bin jedoch noch jung und unwissend :X ...)...

    Alternative wäre, eine Function aufzubauen, in der alle Variablen stehen.

    EDIT: Ich bin Guru :X 100er Post ^^

    EDIT2: Danke, ist für mich eine klare Antwort:
    Wenn in der Function steht "x*1.1*1.3*1.25*1.4*......." kann man die einzelnen Werte nichtmehr voneinander abhalten, und müsste nochmals extra in einem Heft oder so nachsehen, welcher Wert wofür steht.... (falls ich mal eben die Steuern ändern möchte, oder so)
     
    Zuletzt bearbeitet: 21 Mai 2017
  5. ukulele

    ukulele Datenbank-Guru

    Ich würde gar keine Funktion für verschiedene Lieferkosten anwenden, ich würde eine Tabelle mit Gebürenpositionen anlegen die auch erweitert werden kann ohne gleich an einer Funktion rum zu schustern. Da stehen dann die Leistungen und die Kosten drin, das ist ganz gewöhnliches vorgehen. Ich verkette doch nicht 5 Funktionen um einen Preis für eine Lieferung zu bestimmen.
     
  6. LionVI

    LionVI Benutzer

    ähm, kannst du mal erklären weshalb du da 2 Funktionen brauchst?
    warum multiplizierst du x nicht mit 2/3 ???
     
  7. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Rechne mal den Verkaufspreis nach Steuern, Gewinnrate, Einkaufspreis und so weiter?

    Da ändert sich nicht der Wert mit 2/3, sondern evtl. die Steuern, evtl. die Gewinnrate, und evtl. der Einkaufspreis.

    Ich meine, klar ist das einfügbar in eine Function, aber wer kennt sich dann am Ende noch aus, wenn da wirklich viele Parameter sind?
    Beispiel: 25,79€ Enkaufspreis -> +10% Gewinnrate -> +20% Steuern -> ~34€, und jetzt willst du herausfinden, wenn in einer Function steht, x*1,1*1,2, was von den 2 was ist? ;)

    Mir ist klar, das kann man sich denken, aber wenn da viele Parameter mit verschiedenen Steuern usw sind, wirds schwierig
     
  8. LionVI

    LionVI Benutzer

    naja , die 2 bis 5 Funktionsparameter ordentlich benannt, sollte jede Funktion "verkraften" ;-)
     
  9. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    ... Jeder geht seinen Weg ;)
    Ich gehe halt den Komplizierten, wies aussieht :D
     
  10. LionVI

    LionVI Benutzer

    warum einfach wenns auch kompliziert geht, gell:):D
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden