-3
votes

Est-il possible d'accéder aux lignes d'un groupe lorsque nous utilisons le groupe par

J'ai une table comme suit dans laquelle pays pourrait être dupliqué. XXX

J'ai créé une requête qui me dirait le compte par pays (par exemple 4 records , pour l'Allemagne, 2 pour le Mexique, etc.). xxx

i get xxx

Je suppose que les colonnes énumérées dans le Le groupe par clause est utilisé pour former des groupes. Le groupement est basé sur des lignes de même valeur dans la colonne spécifiée ou les colonnes étant placées dans le même groupe. Donc, dans l'exemple ci-dessus, argentina groupe contient 3 rangées. Est possible que je puisse avoir accès à des rangées individuelles qui sont dans un groupe afin que je puisse également produire les villes dans le résultat?

quelque chose comme xxx < / p>

sql

8 commentaires

quel SGBD utilisez-vous? Certaines offrent une fonction d'agrégation group_concat qui fait exactement ce dont vous avez besoin.


Oui. C'est possible. Mais quel est votre SGBDM?


Pratiquer sur w3schools site web. Je ne sais pas quel db ils utilisent


Le SGBD est votre réponse


Pourquoi la question est-elle marquée?


La table dérivée et la commande par sont totalement inutiles. Votre requête est équivalente à Sélectionnez Pays, Count (Pays) comme comptage de la commande client par pays


Vous obtenez probablement des bowvotes parce que vous ne spécifiez pas quel DBMS utilisez-vous. Sans ces informations, le problème ne peut pas être résolu.


Je suppose que le DBMS est SQL Server la plupart des temps que j'ai vus sur les écoles W3


3 Réponses :


0
votes

Vous pouvez rejoindre la table groupée à la table d'origine:

select cu.*, co.cnt from Customers cu
join  (
    select Country, count(Country) cnt AS Count
    from Customers
    group by Country
) co on cu.Country = co.Country


2 commentaires

Désolé, je ne comprends pas comment cela me donnera accès à des villes individuelles d'un groupe


@Manuchadha utilise Cu.City pour y accéder.



-1
votes
SELECT country, 
LISTAGG(city, ', ') WITHIN GROUP (ORDER BY city) as cities,
count (*) as count 
FROM customers
GROUP BY country 
ORDER BY country

5 commentaires

Cela imprimera plusieurs fois pays, ville si la ville est différente et que le pays est identique


Oui, si vous utilisez Oracle, vous pouvez utiliser Listagg, pour produire une liste de villes séparées par des virgules pour chaque pays: Sélectionnez Pays, Listagg (Ville, ') Au sein du groupe (commander par ville) comme des villes du groupe des clients par pays d'ordre par pays pays;


thats ce que je dis il n'y a aucune surprise, le SGMS est à nouveau Oracle pour générer SQL généralisé pour tous les SGBD


J'ai mis à jour ma réponse et je crois que cela produit le résultat souhaité maintenant. Si oui, veuillez marquer la réponse comme correcte. Bonne journée.


Merci Ted. J'ai essayé votre réponse, mais pour un total de 91 enregistrements, votre requête n'a montré que 69



0
votes

Vous pouvez essayer le code ci-dessous.

alter proc dbo.gen_sp_g_concatdatas COMME COMMENCER Déclarez @Countryname comme INT, @rowctry comme int = 1, @Cities comme Varchar (max) = '', @rowcity comme int = 1 DÉCLARE @TMPTABLECONTRY TABLE (ID INT, PAYS VARCHAR (MAX))) Insérer dans @tmbarCountry (Id, pays) Sélectionnez Row_Number () sur (Commande par ISNULL (Pays, 0) ASC), - ID - INT Isnull (pays, 0) - pays - Varchar (max) De dbo.tmpcustomertable Groupe par pays Tandis que @rowctry <= (sélectionnez max (id) à partir de @tmbablecountry) COMMENCER Sélectionnez @CountryName = ISNULL (Pays, '') à partir de @tmbarCountry où id = @rowctry xxx

fin

Sélectionnez * à partir de @TMPtableresult FINIR Aller


0 commentaires