J'utilise Oracle SQL et je souhaite regrouper certaines lignes différentes qui "comme" les résultats de la fonction. Pour élaborer avec un exemple: supposons que j'ai une table Mesa avec une des colonnes est une énorme chaîne. Et je compte le nombre de lignes correspondant à des motifs particuliers: em> p> alors supposons que le résultat de cette requête est le suivant: em> P> Fruit..afsafafasfa ... Red_apple 20 P> Fruit..afsafafasfa ... Jaune_apple 12 P> Fruit..afsafafasfa ... Green_apple 3 P> Fruit..afsafafasfa ... Purple_orange 4 P> Fruit..afsafafasfa ... red_orange 45 p> mais je veux que mes résultats soient: em> P> Apple 35 P> orange 49 p> est-ce possible? Si oui, comment ça va? :) p> Les commentaires et les extraits de code sont très appréciés. P> PS: Bien sûr, la requête et les résultats sont plus compliqués que l'exemple ci-dessus. Je viens de l'écrire comme pour que la simplicité soit expliquée. P> acclamations .. p> p>
5 Réponses :
SELECT count(*) AS 'Apples' FROM MESA m WHERE m.str LIKE '%FRUIT%' AND m.str LIKE '%APPLE%' SELECT count(*) AS 'Oranges' FROM MESA m WHERE m.str LIKE '%FRUIT%' AND m.str LIKE '%ORANGE%' Would that work?
Merci pour la réponse Jnkyle. J'ai également pensé à cela, mais la réponse de Dave est plus appropriée pour mon cas (car j'ai beaucoup de groupes à faire)
sûr:
Merci Dave. J'aime ça avec trucie :)
quelque chose comme ça?
Vous ne pouvez pas utiliser Count (*) sans clause de regroupement ... (regardez Select interne)
@ ThinkJet- Désolé, je pensais avoir un groupe par la sélection interne
Une autre variante de David Markle Réponse:
SELECT fruit_name, count(1) as fruit_count FROM ( SELECT CASE WHEN m.str LIKE '%APPLE%' THEN 'Apple' WHEN m.str LIKE '%ORANGE%' THEN 'Orange' END as fruit_name FROM MESA m WHERE m.str LIKE '%FRUIT%' AND (m.str LIKE '%APPLE%' OR m.str LIKE '%ORANGE%') ) GROUP BY fruit_name
Merci pour la réponse ThinkJet. Très appréciée.
Je le ferais de cette façon - nécessite un seul changement pour ajouter des types supplémentaires de fruits.
WITH fruits AS ( SELECT 'APPLE' fruit FROM DUAL UNION ALL SELECT 'ORANGE' fruit FROM DUAL ) SELECT fruit, count(*) FROM MESA m, fruits WHERE m.str LIKE '%FRUIT%' AND m.str LIKE '%' || fruits.fruit || '%' GROUP BY fruit
Qu'en est-il des chaînes comme celle-là: «fruit..afsafafasfa ... orange_apple»?;)
Oui, c'est une bonne remarque. Pour mon cas, ce n'est pas très susceptible d'avoir de telles chaînes. Je suppose que cela dépend de l'ordre des cas.