GNT sans publicité, site mobile, fonctionnalitées exclusives...

Selection de personnes de sexe identique et d'age proche

Le
Bruno Baguette
Bonjour,

Je cherchais à afficher les 10 personnes qui étaient le plus
similaire à une personne précise. Les critères étant les personnes
du même sexe et dont l'âge se rapproche de l'age de cette personne.
Les personnes ne possédant pas de photos sont écartées.

Voici donc la table (en faisant abstraction des champs qui ne
concernent pas cette requête) :
personnes (idpersonne,sexe,date_naissance,photovisagemini_url) où
idpersonne est évidemment une clef primaire qui est remplie par
une séquence.

Et la requête que j'ai faite :

SELECT idpersonne, photovisagemini_url
FROM personnes
WHERE photovisagemini_url IS NOT NULL
AND char_length(trim(BOTH ' ' FROM photovisagemini_url))>0
AND personnes.sexe IN (SELECT sexe FROM personnes WHERE idpersonne
= 250::int8)
AND personnes.idpersonne != 250::int8
ORDER BY abs(personnes.date_naissance - (SELECT date_naissance FROM
personnes WHERE idpersonne = 250::int8)) ASC
LIMIT 10;

Je précise que je travaille avec PostgreSQL 7.3.4

Cette requête fonctionne bien, mais je me demandais si personne n'aurait
une suggestion d'une manière plus performante de faire cette requête ?

D'avance merci ! :-)

--
-
Bruno Baguette - bouchon@alussinan.org
Lire la réponse

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD - SQLpro
Le #21702511
pourquoi ne pas faire tout simplement une jointure ?

du style :

SELECT ..., ABS(P.AGE - P1.AGE)

FROM PERSONNES P
INNER JOIN PERSONNE P1
ON P.idpersonne AND P.sexe = P1.sexe
WHERE ...

ORDER BY ABS(P.AGE - P1.AGE)
LIMIT 10

A +


--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Bruno Baguette a écrit:
Bonjour,

Je cherchais à afficher les 10 personnes qui étaient le plus
similaire à une personne précise. Les critères étant les personnes
du même sexe et dont l'âge se rapproche de l'age de cette personne.
Les personnes ne possédant pas de photos sont écartées.

Voici donc la table (en faisant abstraction des champs qui ne
concernent pas cette requête) :
personnes (idpersonne,sexe,date_naissance,photovisagemini_url) où
idpersonne est évidemment une clef primaire qui est remplie par
une séquence.

Et la requête que j'ai faite :

SELECT idpersonne, photovisagemini_url
FROM personnes
WHERE photovisagemini_url IS NOT NULL
AND char_length(trim(BOTH ' ' FROM photovisagemini_url))>0
AND personnes.sexe IN (SELECT sexe FROM personnes WHERE idpersonne
= 250::int8)
AND personnes.idpersonne != 250::int8
ORDER BY abs(personnes.date_naissance - (SELECT date_naissance FROM
personnes WHERE idpersonne = 250::int8)) ASC
LIMIT 10;

Je précise que je travaille avec PostgreSQL 7.3.4

Cette requête fonctionne bien, mais je me demandais si personne n'aurait
une suggestion d'une manière plus performante de faire cette requête ?

D'avance merci ! :-)

Publicité
Suivre les réponses
Poster une réponse
Anonyme