par
Wolan » 13 juil. 2017, 22:43
Bonsoir,
Attention la requête utilisée ne fonctionne que sur Mysql 8.0.
A partir de votre description je suis parti sur ce modèle :
Code : Tout sélectionner
create table oiseaux(
id int AUTO_INCREMENT,
numero varchar(100),
annee varchar(100),
ideleveur varchar(100),
pere varchar(100),
mere varchar(100),
idcanari varchar(100),
PRIMARY KEY(id)
);
Voici les données :
Code : Tout sélectionner
insert into oiseaux (numero,annee,ideleveur,pere,mere,idcanari)
values
('002', '2016','AA01','010-2015-BB01','005-2015-BA02','002-2016-AA01'),
-- Pere 1
('010', '2015','BB01','011-2014-BB01','015-2014-BA02','010-2015-BB01'),
-- Grand Mere 1
('015', '2014','BA02',null,null,'015-2014-BA02'),
-- Mere 1
('005', '2015','BA02','011-2014-BB01','016-2014-BA02','005-2015-BA02'),
-- Grand Mere 2
('016', '2014','BA02',null,null,'016-2014-BA02'),
-- Grand Pere commun
('011', '2014','BB01',null,null,'011-2014-BB01');
Et voici la requête :
Code : Tout sélectionner
with recursive cte (id, idcanari, pere,mere) as
(
select id,
idcanari,
pere,
mere
from oiseaux
where idcanari = '002-2016-AA01'
union all
select p.id,
p.idcanari,
p.pere,
p.mere
from oiseaux p
inner join cte
on p.idcanari = cte.pere || p.idcanari = cte.mere
)
select idcanari as 'Id',
count(*) as 'Nbr',
count(*)/(select count( distinct idcanari) from cte)*100 as '%'
from cte
group by idcanari
order by count(*) desc;
Bonsoir,
[b]Attention la requête utilisée ne fonctionne que sur Mysql 8.0.[/b]
A partir de votre description je suis parti sur ce modèle :
[code]create table oiseaux(
id int AUTO_INCREMENT,
numero varchar(100),
annee varchar(100),
ideleveur varchar(100),
pere varchar(100),
mere varchar(100),
idcanari varchar(100),
PRIMARY KEY(id)
);[/code]
Voici les données :
[code]insert into oiseaux (numero,annee,ideleveur,pere,mere,idcanari)
values
('002', '2016','AA01','010-2015-BB01','005-2015-BA02','002-2016-AA01'),
-- Pere 1
('010', '2015','BB01','011-2014-BB01','015-2014-BA02','010-2015-BB01'),
-- Grand Mere 1
('015', '2014','BA02',null,null,'015-2014-BA02'),
-- Mere 1
('005', '2015','BA02','011-2014-BB01','016-2014-BA02','005-2015-BA02'),
-- Grand Mere 2
('016', '2014','BA02',null,null,'016-2014-BA02'),
-- Grand Pere commun
('011', '2014','BB01',null,null,'011-2014-BB01');[/code]
Et voici la requête :
[code]with recursive cte (id, idcanari, pere,mere) as
(
select id,
idcanari,
pere,
mere
from oiseaux
where idcanari = '002-2016-AA01'
union all
select p.id,
p.idcanari,
p.pere,
p.mere
from oiseaux p
inner join cte
on p.idcanari = cte.pere || p.idcanari = cte.mere
)
select idcanari as 'Id',
count(*) as 'Nbr',
count(*)/(select count( distinct idcanari) from cte)*100 as '%'
from cte
group by idcanari
order by count(*) desc;
[/code]