2013-08-06 1 views
0

Voici un exemple de ce que je suis en train de faire:sélectionnez statment avec le champ de sélection comme (? Quel est ce appelé)

Je dois organiser une liste d'événements par mois/année avec le nombre des événements, puis une liste de virgules des identifiants de ces événements.

Voici ce que j'ai:

 SELECT count(*) as counter, 
        MONTHNAME(publishDate) as month, 
        YEAR(publishDate) as year 
       FROM bursch.events 
    GROUP BY YEAR(publishDate), 
       MONTH(publishDate) 
    order by year desc; 

MAIS, en plus, j'ai besoin ces identifiants trop (2,5,6) < < < comme ceci:

Voici le concept:

SELECT count(*) as counter, 
     MONTHNAME(publishDate) as month, 
     YEAR(publishDate) as year, 
     (select id 
      from events 
      where 'call conditions affect the main query') as IDList 
       FROM events 
    GROUP BY YEAR(publishDate), 
       MONTH(publishDate) 
    order by year desc; 

ce qui se traduirait par quelque chose comme ceci:

counter | month | year | ids 
----------------------------------------- 
3  | June | 2013 | 45,49,50 
4  | July | 2013 | 39,40,41,42 
2  | March | 2011 | 33,34 
5  | May  | 2011 | 27,29,30,31,32 
1  | June | 2011 | 22 
4  | July | 2011 | 14,17,18,19 
1  | January | 2010 | 13 

Ce serait génial de pouvoir baser mes résultats de sélection sur les conditions de l'instruction de sélection principale. Il pourrait y avoir une meilleure façon d'obtenir ce résultat. Peut-être une méthode plus simple. Mais la partie select comme champ. Comment cela s'appellerait-il? Requête corrélée? Pas certain. J'ai vu que je peux le faire dans Oracle et MySQL et c'est pratique (si je savais seulement comment ça s'appelle).

Merci à l'avance. Faites-moi savoir si quelque chose n'est pas clair.

Répondre

2

MySQL a une fonction appelée GROUP_CONCAT() qui concatène les lignes au lieu des colonnes.

SELECT COUNT(*) as counter, 
     MONTHNAME(publishDate) as month, 
     YEAR(publishDate) as year, 
     GROUP_CONCAT(id) as IDs 
FROM events 
GROUP BY YEAR(publishDate), 
      MONTH(publishDate) 
ORDER BY year desc; 
+0

Voilà! bon travail... –

Questions connexes