SÉLECTIONNEZ la commande pour calculer le pourcentage d'
Je vais essayer d'obtenir le pourcentage de chaque vidéo que j'ai dans ma base de données en fonction de son nombre de vues à l'encontre de toutes les autres vidéos.
Je suis d'essayer d'afficher toutes les vidéos de la plus haute comptent le plus bas, en affichant son pourcentage sur le côté à l'intérieur d'une belle page HTML.
Évidemment, le pourcentage de la gamme de 0 - 100% (et pas plus) et de la vidéo les plus populaires aurait probablement 100% je suppose..
J'ai environ 3 400 vidéos dans la base de données. Mes tentatives sont risibles et ont été de me gratter la tête pour sur jours maintenant..
Ma table ressemble à quelque chose de semblable.
video_public
id | video_title | video_views
Tentative:
SELECT
id,
video_views * 100 / (SELECT COUNT(*) FROM video_public)
FROM `video_public` stat
Pour être honnête je ne sais même pas si cette requête SQL est droit.
Je n'ai même pas pris en considération les vidéos vues contre toutes les vues de la vidéo et total de vidéos..
Vraiment coincé..
- Je ne suis pas clair sur ce que vous cherchez, et je ne suis pas sûr que vous êtes soit parce que vous vous dites "les plus populaires de la vidéo aurait probablement 100%, je suppose". Il semble que vous voulez exprimer le nombre de vues de chaque vidéo présente comme un pourcentage *par rapport au nombre de vues de la vidéo les plus populaires". Est-ce exact?
- Larry Lustig, Qui est correct.
- Très bon, j'ai posté une solution ci-dessous.
Vous devez vous connecter pour publier un commentaire.
D'accord, basé sur la clarification de votre question:
Vous voulez calculé (video_views * 100) /(largest_views_for_any_single_video) pour chaque vidéo dans la base de données.
Le numérateur est facile, c'est juste le video_views colonne. Le dénominateur est
Alors, mettez-les ensemble et vous obtenez:
Qui devrait produire 100 pour le plus visionné les vidéo(s), et les pourcentages inférieurs pour d'autres vidéos, jusqu'à 0 pour quelque chose de jamais vu.
Modifier ce que sheepsimulator l'indique, vous pouvez essayer:
Modification de la commande en fonction de vos goûts, bien sûr.
Bien, j'aimerais commencer par penser à ce que votre e la recherche pour:
Fondamentalement, vous voulez savoir c'est vue de rang premier. Pourquoi ne pas trier les enregistrements en fonction de vues de la vidéo:
Maintenant, et je pense que c'est ce que vous voulez faire, est de ne montrer qu'une partie de ces, disons, 10%? Vous voulez attribuer à chacun de vos dossiers une percentile. Cela signifie que pour la commande que vous avez attribuées à l'vidéos, vous voulez faire de la "ligne du haut" (le premier retournés) sera donné à 100% et la dernière ligne retournée à 0%. Il donne un nombre entre 0 et 100 pour chaque élément dans votre jeu de résultats.
Votre e percentile est calculée:
Si vous souhaitez uniquement afficher le top 10%, essayez les solutions suivantes:
Il n'est pas totalement clair ce que vous cherchez, mais je pense que cela pourrait être utile.
EDIT:
Après avoir examiné les commentaires, particulièrement Éclatée et Larry Lustig s, et re-lecture de la question, je dirais que la somme() de la video_views est incorrect, alors je suis retourné et a changé la somme()s (max)s. Cela vous donnera un pourcentage basé sur la vidéo les plus consultés.
Je pense qu'il est préférable de calculer votre pourcentage dans votre script, et juste de récupérer la vue des chiffres de la base de données.
Exécuter deux sélectionne:
pour obtenir le nombre maximum de vues et puis exécutez votre autres de sélectionner et calculer le pourcentage de votre script. Sinon, celle-ci peut s'exécuter pour chaque ligne de résultat ... ce qui n'est pas ce que vous voulez, performance sage.
Notez également que vous devez utiliser
max
, passum
oucount(*)
puisque vous voulez le savoir "combien de fois cette vidéo à été regardé par rapport à celui que j'ai regardé la plupart". L'imagerie vous avez regardé toutes les vidéos une fois et on deux fois. Quel est le pourcentage va être? 100%? Ou 0.0000001%?cela vous donne le pourcentage du total des points de vue a chaque vidéo.
Essayer ce qu'il fonctionne avec MySQL à maintenant.
C'est la table:
Le Code ci-dessous fonctionne dans SQL Server:
C'est un curseur avec une table temporaire je viens d'écrire.
declare @total int
set @total = (select sum ((Vues) de la vidéo)
C'est la table:
Le remplir avec des données et u sont prêts à aller. Profiter de vous-même.
Si vous voulez calculer le pourcentage de requête 1, utilisation:
Bien sûr, il serait beaucoup plus efficace pour stocker les résultats intermédiaires en PHP (ou d'une variable SQL) et de le passer à la prochaine requête
==> tout le monde à l'aide de SOMME(points de vue) dans la requête a les mauvais résultats !! Le classement le plus élevé de la vidéo devrait aboutir à 100%, pas d'un pourcentage du nombre de vues de toutes les vidéos combiné, vous devez donc utiliser MAX(vues)
Quelque chose à garder à l'esprit... jusqu'à présent, toutes les réponses comprennent des sous-requêtes, dont je ne pense pas que sont nécessaires. Celles-ci seront évaluées pour CHAQUE ligne de votre table!
Plutôt le faire à l'extérieur, par exemple
Au lieu de cela:
Ce faire:
Qui devraient courir plus vite, et moins d'impact sur votre base de données.
Vous n'aurez donc pas à le plus de vues de la vidéo à 100%, sauf si un seul de vos vidéos devient consultés, mais il vous donnera le nombre de vues, le ratio de vues de cette vidéo, sur toutes les visites, et un pour cent de cette fois, a été considérée par rapport à toutes les vidéos.
La meilleure façon d'accomplir ceci est fait avec les deux requêtes distinctes. Je suis d'accord avec Stuart que les sous-requêtes ont un impact négatif sur les performances de la base parce que la sous-requête sera exécutée pour chaque enregistrement retourné.
Ce que je voudrais faire est de lancer une requête pour obtenir les vues de la vidéo et de stocker le résultat dans une variable locale.
SELECT SUM(video_views) FROM VIDEO_PUBLIC
si vous souhaitez que le pourcentage perçu total de tous les points de vue
ou
SELECT MAX(video_view) FROM VIDEO_PUBLIC
si vous souhaitez que le pourcentage considéré par rapport à la vidéo les plus populaires.
Ensuite, exécutez une requête pour obtenir les vidéos, commande par la plupart des vues:
SELECT id, video_title, video_views FROM VIDEO_PUBLIC ORDER BY video_views DESC
Ensuite dans le code, vous pouvez calculer le pourcentage perçu chaque vidéo en utilisant le résultat de la première requête, tout en parcourant les résultats de la deuxième requête.
Je ne suis pas sûr de ce que votre langue à l'aide de votre écran, mais en C#, il devrait ressembler à ceci: