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

Probleme mit Nullwerten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von der_Goof, 29 Juni 2012.

  1. der_Goof

    der_Goof Neuer Benutzer

    Hallo zusammen,

    ich komme mit meiner aktuellen Abfrage leider nicht weiter. Zu IDs (post_id) werden mehrmals Werte im Bereich 1-5 zugeteilt (rating_id). Folgendes will ich erreichen: Ich würde gerne die IDs auslesen, die öfters die Werte 1,2,3 zugeteilt bekommen haben als die Werte 4 und 5. Aktuell sieht meine Query wie folgt aus:

    Code:
    select post_id as test, count(rating_id) as test2
    from phpbb_post_ratings
    where rating_id = 1 or rating_id = 2 or rating_id = 3
    group by test
    having count(rating_id) > (
        select count(rating_id)
        from phpbb_post_ratings
        where (rating_id = 4 or rating_id = 5) and test = post_id
        group by post_id
        )
    Das Problem ist nun, dass beide Selects keine ID/Werte ausgeben, sofern die ID entweder nie 1,2,3 oder 4,5 zugewiesen bekommt. Bei der äußeren Select ist das eher kein Problem, denn wenn in der äußeren nichts gefunden wird, können außen kaum mehr Einträge als innen vorhanden sein :) Aber wenn außen z.B. 6 Einträge, innen 0 gefunden werden, wird diese ID nicht ausgegeben, denn in der inneren Select-Anweisung wurde ja nichts gefunden. Wie kann ich es hinbekommen, dass da irgendwie noch ne 0 bei raus kommt?
     
  2. der_Goof

    der_Goof Neuer Benutzer

    Neuer Versuch, bringt allerdings gar nix ...

    Code:
    select post_id as test2, count(rating_id)
    from phpbb_post_ratings
    group by test2
    having (
        SELECT count(rating_id)
        from phpbb_post_ratings
        WHERE (rating_id = 1 or rating_id = 2 or rating_id = 3) and test2 = post_id
        group by post_id
        ) > (
        SELECT count(rating_id)
        from phpbb_post_ratings
        WHERE (rating_id = 4 or rating_id = 5) and test2 = post_id
        group by post_id
        )
    Mich wundert nur, dass count(rating_id) jetzt stets seine Werte um eins inkrementiert ausgibt ...
     
  3. der_Goof

    der_Goof Neuer Benutzer

    Neue Info: Der "inkrementierte" Wert, ist der, der eigentlich rauskommen soll ...
     
  4. der_Goof

    der_Goof Neuer Benutzer

    Lösung falls es wen interessiert:

    Code:
    select post_id as test2, count(rating_id)
    from phpbb_post_ratings
    group by test2
    having (
        SELECT count(rating_id)
        from phpbb_post_ratings
        WHERE (rating_id = 1 or rating_id = 2 or rating_id = 3) and test2 = post_id
        group by post_id
        ) > (
        SELECT count(rating_id) * 0.5
        from phpbb_post_ratings
        WHERE test2 = post_id
        group by post_id
        )
     
    ukulele, PLSQL_SQL und Walter gefällt das.
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