• # count + having

    Posté par . En réponse au message [RESOLU]Limites du nombre d'enregistrements sous condition. Évalué à 2.

    Bonjour,

    Je propose de rajouter
    - un count(*) as counter dans la liste des champs après le select
    - une clause having avec une condition telle que (à adapter) (counter < 5 and re.gender = 1 ) or (counter < 6 and re.gender = 0 )

    Je ne suis pas sûr que cela fonctionne car je ne sais pas quand est calculé le count(*) : avant ou après le tri. (en fait plus j'y pense, plus je pense que cela ne doit pas fonctionner)

    Sinon, la solution est d'utiliser la même astuce en utilisant la requête proposée dans le message comme une sous requête (en rajoutant le re.gender dans les champs conservés)
    cela donnerait quelque chose comme :

    create or replace view galette_athletics_speed_chal as
    select id_adh,
     id_race,
     points,
     bonus,
     saison,
     count(*) as counter
    from ( 
    select a.id_adh AS id_adh,
     re.id_race AS id_race,
     re.gender AS gender,
     point_for_race(re.time,re.gender,ro.distance, NULL) AS points,
     point_bonus(re.category) as bonus,
     if((month(ra.race_date) < 9),(year(ra.race_date) - 1),year(ra.race_date)) AS saison
     from 
     galette_athletics_results re join galette_adherents a on a.id_adh = re.id_adh
     join galette_athletics_races ra on ra.id_race = re.id_race
     join galette_athletics_routes ro on ro.id_route = ra.id_route 
     where ro.is_neutralized = 0 and ro.is_challenge = 1 
     order by `saison` desc, a.id_adh, points desc;
    )
    group by saison, id_adh, points, bonus, id_race
    having (counter < 5 and gender = 1 ) or (counter < 6 and gender = 0 )

    Il me semble que la clause group by est inutile dans la sous-requête...

    Bonne journée et merci de donner un retour !