2010-10-24 5 views
1

Déterminer un titre pour cette question a été difficile, mais ce qui suit est plus difficile pour moi. J'espère que n'importe qui peut aider.Comment calculer le pourcentage de "égal ou mieux" dans mysql DB?

J'ai une simple table de base de données MySQL. Cette table est remplie d'enregistrements contenant un identifiant et le nombre de visiteurs par semaine. Il a des dossiers de 2 ans d'environ 200+ sites Web.

Pour résumer, je veux être en mesure de savoir deux choses:.

1.) - « A la semaine 54 de 2009, le site avait somethingonline.com de 300 visiteurs » (facile bien sûr, je peux le faire) 2.) - "Le site web sometingonline.com était parmi les 8% les meilleurs sites Web de notation de cette semaine."

Maintenant, comment puis-je obtenir le numéro 2? Bien sûr, je veux savoir que le pourcentage de tous les sites Web chaque semaine si je reçois une liste comme:

  1. sometingonline1.com - 300 visiteurs - 8% du score de site comme celui-ci ou mieux
  2. sometingonline2. com - 400 visiteurs - 4% du score du site Web aime ça ou mieux
  3. sometingonline3.com - 500 visiteurs - 2% du score du site Web aime ça ou mieux
  4. sometingonline4.com - 600 visiteurs - 1% du site score comme celui-ci ou mieux

Comment puis-je obtenir ces résultats? Est-ce possible dans une requête?

J'utilise MySQL et PHP.

Répondre

2

La clé consiste à impliquer deux "copies" différentes de votre table visits. Dans cette requête v1 représente le site Web que vous êtes en train de regarder. Pour chacun des sites Web v1, nous joindrons une copie du tableau visits, correspondant à n'importe quelle ligne qui couvre un site avec plus de visites dans la même semaine.

SELECT v1.website_name, v1.visits, COUNT(v2.id) 
FROM visits AS v1 
INNER JOIN visits AS v2 ON (v1.week_number = v2.week_number AND v2.visits > v1.visits AND v2.id != v1.id) 
WHERE week_number = 54 

Cela vous indiquera le nombre des sites qui avaient plus de visiteurs. Pour obtenir cela en pourcentage, exécutez une requête distincte pour simplement compter le nombre total de sites qui ont eu visites dans cette semaine. Dans votre script PHP, vous pouvez ensuite faire la division simple pour obtenir le pourcentage que vous voulez.

+0

Merci VoteDisciple, je suis en train de travailler sur ça maintenant et je reviendrai dessus. À WHERE week_number = 54 je l'ai maintenant édité à WHERE v1.week_number = 54. Je pense que c'est juste, n'est ce pas? – Glooh

+0

VoteyDisciple, ça marche! Merci! Une toute petite question cependant. Si COUNT (v2.id) renvoie 0, toutes les autres valeurs sont également vides. Comment puis-je empêcher cela (donc si un certain site Web a les visiteurs les plus élevés, il ne renvoie que des valeurs vides mais aussi dans ce cas je voudrais obtenir les numéros de visiteurs et website_name). – Glooh

+0

Bon point. Changez le 'INNER JOIN' en un 'LEFT JOIN'. – VoteyDisciple

Questions connexes