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

Hilfe bei Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von peace_Julian, 4 Mai 2015.

  1. peace_Julian

    peace_Julian Neuer Benutzer

    Ich hab da eine Abfrage wo ich nicht weiter komme.

    Es geht um inner selects bzw. unterabfragen:

    SELECT `offer` , mergedcategories.category, offers_feed.payout as publisher_payout, CAST( ROUND( SUM( conversions ) ) AS SIGNED ) AS conversions,CAST(ROUND(SUM(revenue)) AS SIGNED) as revenue, TRIM(LEFT( statsyear.offer, 3 )) AS Land, country.name, offers_feed.countrytarget, offers_feed.offerid,

    ( SELECT round(avg(offers_feed.payout), 2) FROM offers_feed as inner_offers_feed
    WHERE TRIM(LEFT( inner_offers_feed.name, 2 )) like TRIM(LEFT( statsyear.offer, 2 ))
    group by TRIM(LEFT( inner_offers_feed.name, 2 )) ) as Test_Durchschnit
    t

    FROM statsyear

    INNER JOIN country ON LEFT( statsyear.offer, 3 ) = country.iso
    INNER JOIN offers_feed ON statsyear.offerid = offers_feed.offerid
    LEFT OUTER JOIN mergedcategories ON statsyear.offerid=mergedcategories.id

    WHERE conversions <>0
    AND YEAR =2014
    AND revenue <>0
    GROUP BY offers_feed.offerid
    ORDER BY `revenue` DESC

    Diese Unterabfrage liefert ein falsches Ergebnis. ich möchte den avg von payout gruppiert nach left(name) und die Bedingung soll von left(name) auf die überabfrage left(offer) gehen. Die where klausel ist eigentlich korrekt, ich hab mir auch schon beide Werte ausgeben lassen, dass stimmt soweit.
    Trotzdem stimmt der avg(payout) nicht. Wenn ich diese unterabfrage in einer eigenständigen abfrage anzeigen lasse sieht das so aus: SELECT ROUND( AVG( offers_feed.payout ) , 2 ) AS durchschnitt_payout, TRIM( LEFT( name, 2 ) ) AS Land
    FROM offers_feed
    GROUP BY TRIM( LEFT( name, 2 ))
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Kannst Du versuchen, daß auf eine Problembeschreibung zu reduzieren, die man als normal Sterblicher in unter 2 Minuten parsen kann? Vielleicht mit einer kleine Beispieltabelle mit reproduzierbaren Daten / Resultaten.
     
  3. peace_Julian

    peace_Julian Neuer Benutzer

    Ok hab ich mir gedacht.. Es geht eigentlich nur um den oberen Teil:

    SELECT B.Feld1, B.Feld2, (SELECT avg(offers_feed.payout) FROM Tabelle1 as A
    WHERE TRIM(LEFT( A.name, 2 )) = TRIM(LEFT( B.offer, 2 )) //hier möchte ich von der Unter abfrage eine Beziehung zum Aktuellen Datensatz der überabfrage verweisen
    group by TRIM(LEFT( A.name, 2 )) ) as Test_Durchschnit
    t

    FROM B

    inner / outer / left joins...

    group by ...

    Das Ergebnis von Testdurchschnitt ist falsch, mache ich hier was falsch?
     
  4. peace_Julian

    peace_Julian Neuer Benutzer

    im prinzip möchte ich eine ganz einfache Abfrage als Feld mit bezug auf den datensatz in eine Abfrage zusammenführen
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Noch einmal: reduziere das bitte soweit, daß man es verstehen kann. "im prinzip möchte ich eine ganz einfache Abfrage als Feld mit bezug auf den datensatz in eine Abfrage zusammenführen" verstehe ich nicht.
     
  6. ukulele

    ukulele Datenbank-Guru

    Du sagst dein Durschnittswert stimmt wenn du die Unterabfrage einzeln ausführst (in dem du LIKE trim(left(statsyear.offer,2)) durch einen statischen Wert ersetzt) aber nicht mehr wenn deine Gesamtabfrage läuft?
     
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