2013-08-15 3 views

Répondre

3

Vous ne pouvez pas faire directement que MySQL parce qu'il n'y a pas de fonction à urlencode ou urldecode chaînes.

Vous devrez créer une fonction définie par l'utilisateur pour gérer ce processus. Une fois que vous avez cette fonction, optez simplement pour un group by avec une clause having.

Link to the required UDFs

Si UDFs ne sont pas une option, la seule solution que je peux penser est de remplacer manuellement les caractères (sous votre propre risque):

SELECT REPLACE(email, "%40", "@") DuplicateEmail, COUNT(*) Amount 
FROM t 
GROUP BY DuplicateEmail 
ORDER BY Amount desc 

Fiddle here.

Sortie:

| DUPLICATEEMAIL | AMOUNT | 
--------------------------- 
| [email protected] |  2 | 
| [email protected] |  2 | 
| [email protected] |  1 | 
+0

Non, je veux récupérer les deux enregistrements qui contiennent @ &% 40 –

+0

Ce n'est pas ce que vous avez dans votre exemple ... vous n'affichez que ceux avec le @ dans votre résultat. Le résultat de ma requête est ce que vous recherchez dans votre résultat attendu. Veuillez mettre à jour votre question pour afficher la sortie dont vous avez besoin. –

11

Si vous voulez afficher les données exactement comme montré dans votre question, utilisez cette requête:

SELECT email, COUNT(*) AS count 
FROM table 
GROUP BY email HAVING count > 0 
ORDER BY count DESC; 
+1

Juste une note amicale pour tous ceux qui ont signalé ce: alors que ce n'est pas la réponse, il est une réponse - c'est ce que downvotes sont pour. Marquer "pas une réponse" est pour quand quelqu'un ajoute un commentaire (par exemple "moi aussi") comme une "réponse". À votre santé! –

+0

Ci-dessus par @derhansen est comment je dé-dupe des tables. Je vais parfois réduire ("email") au cas où quelqu'un utiliserait des majuscules et des minuscules lors de la saisie de son adresse. Je montre aussi seulement les enregistrements en double avec count> 1. Fonctionne bien. – backwardm

Questions connexes