2009-10-19 8 views
0

J'ai des données qui ressemble à ceci:comment groupe par et compter en utilisant MySQL

 
ID post_author post_title guid 
3309 21 Should somebody not yet on SQL 2008 wait for SQL 2008 R2, since it's near release? http://sql.stackexchange.com/questions/379/should-somebody-not-yet-on-sql-2008-wait-for-sql-2008-r2-since-its-near-release 
1695 429 How do we politely decline well meaning advice from the Grandmother? http://moms4mom.stackexchange.com/questions/1208/how-do-we-politely-decline-well-meaning-advice-from-the-grandmother 
556 173 Books on how to be a great dad http://moms4mom.stackexchange.com/questions/1042/books-on-how-to-be-a-great-dad 
160 30 Building an ice hockey net cam http://photo.stackexchange.com/questions/8/building-an-ice-hockey-net-cam 
159 30 Generic commercial photo release form http://photo.stackexchange.com/questions/4/generic-commercial-photo-release-form 

Je dois créer une requête qui regroupe les données sur une partie du champ GUID (l'URL racine) et compte le POST_AUTHOR pour chacun.

Le résultat que je cherche serait comme ceci:

 
Site Count of Authors 
http://sql.stackexchange.com 1 
http://moms4mom.stackexchange.com 2 
http://photo.stackexchange.com 2 

Je vous serais reconnaissant si quelqu'un me aider à construire le sql.

Répondre

1
SELECT COUNT(POST_AUTHOR) AS AUTHOR_COUNT, GUID FROM TABLE_NAME GROUP BY GUID 
+0

Merci Virat mais Je veux seulement regrouper sur une partie du champ GUID, l'URL racine, jusqu'à .com –

1

Il peut être possible de construire une telle requête mais elle ne sera pas optimisée.

Vous devez ajouter une colonne à votre table qui aura une carte d'identité du site. Ensuite, ajoutez une nouvelle table qui aura des données préparées pour le site: domaine, chemin, ressource, http ou https, etc

De cette façon, vous pouvez être plus flexible dans les recherches et sera beaucoup plus rapide, puisque je suppose vous avez peu d'inserts et un grand nombre de lectures.

0

Le problème est de savoir comment extraire la partie racine de l'URL. Si nous pouvons être sûrs que chaque URL aura au moins 3 barres obliques, cela fonctionnera, en utilisant substring_index

select substring_index(guid,'/',3) as site, count(id) as authors from table 
group by substring_index(guid,'/',3) 

Bien sûr, si vous ajoutez une colonne supplémentaire avec le seul site au moment de l'insertion, tout sera plus rapide, plus propre et plus sûr (vous n'aurez pas à complexifier la requête pour traiter GUIDs avec seulement deux barres obliques)

1

Ecrire une fonction SQL - appeler par exemple, guid_extract (guid), qui extrait les informations pertinentes, vous pouvez ajouter à une colonne dans votre sélection ::

SELECT stuff, otherstuff, guid_extract(guid) as site 
    ... 
    GROUP BY site; 
Questions connexes