3.122 messaggi dal 16 maggio 2002
Se vuoi estrarre anche il campo year devi usare la query precedentemente scritta. Infatti in una istruzione SELECT è possibile formare dei gruppi di tuple che hanno lo stesso valore di specificati attributi, tramite la clausola GROUP BY.
Se tu vuoi sapere la sommatoria del campo impres sui record che hanno stesso valore di month e year allora andava bene la query precedente:

SELECT [month], [year], sum(impres) as totx from [counter] group by [month],[year]

Come ha scritto seoman, quelle sono le tre query che ti occorrono nel caso tu voglia raggruppare solo per month (indipendemente da year), raggruppare solo per year (indipendentemente da month) o raggruppare per month e year.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
21 messaggi dal 28 ottobre 2003
ok, se io voglio raggruppare per month e per year e poi voglio estrarre anche un altro campo DESCRIZIONE in cui c'è scritto qualcosa ?

quale sarebbe la query ?
3.122 messaggi dal 16 maggio 2002
Non avrebbe senso. Senti qua, cerchiamo di ragionarci su.
La group by serve a raggruppare assieme record che hanno uguali valori di alcuni campi. Ad esempio, se tu avessi una tabella nella quale indichi gli acquisti, comprensivi di data, importo, etc., e volessi sapere, anno per anno, quanti acquisti sono stati fatti, che faresti?
Ecco la query

SELECT anno, COUNT(*) AS numero
FROM acquisti
GROUP BY anno

In questo modo ti escono i risultati in questo modo:

anno | numero
2000 178
2001 235
2002 201
2003 159

Se poi ogni acquisto ha anche un campo "note" questo non riguarda la query che volevi fare, dato che vuoi un risultato che riguarda numerosi record, legati solo dall'avere il valore di un campo uguale.
Capito quello che voglio dire?

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
2.584 messaggi dal 14 maggio 2001
Concordo anche perché (seguendo l'esempio di Raynor) se tu volessi avere anche il campo note avresti delle tuple formate da:

anno note numero

Ma (a meno che non ci siano in un determinato anno delle note perfettamente uguali) avrai sempre il campo numero (ottenuto con una sum) uguale a 1
21 messaggi dal 28 ottobre 2003
ho capito.

grazie mille, al momento mi avete risolto tutti i dubbi.
21 messaggi dal 28 ottobre 2003
in effetti ho capito a metà..

stavo "testando" alcuni script, cercavo di capire queste aggregazioni, e sono incappato in un altro problema.

devo raggruppare il campo IDITEM (contare quanti ce ne sono con lo stesso valore (quindi COUNT(iditem) come ho letto su qualche guida) e poi a video far stampare

NAMEITEM - NUMEROx (numero ricavato dal count)

non riesco a far stampare quel nameitem, mi dice errore del server.

select count(iditem) as numerox from comments

sto usando e funziona, ma dovrei estrarre anche il campo (di testo) nameitem.
3.122 messaggi dal 16 maggio 2002
Siamo al punto di prima: non puoi! Se raggruppi su nameitem allora puoi farlo, ma non se raggruppi su iditem.

select iditem, count(*) as numerox
from comments
group by iditem

Questa query estrae tutti gli iditem della tabella "comments" e il numero di volte che compaiono. Se poi, per uguali valori di iditem hai uguali valori di nameitem e vuoi quest'ultimo, allora raggruppa per nameitem. Ma se ogni record ha il suo nameitem, ovvero a iditem uguali corrispondono namitem diversi, torniamo al punto di prima: non avrebbe senso.
Mettiamo che la tabella sia così strutturata:

iditem | nameitem
4 | pippo
5 | pluto
4 | topolino

La query che ti ho postato prima estrarrebbe

iditem | numerox
4 | 2
5 | 1

Ma nel momento in cui vuoi anche il nameitem corrispondente a iditem=4 cosa estrai? pippo o topolino?
Capito ora?

Se poi iditem è chiave per la tabella questa query non ti serve a niente, perché avresti sempre numerox=1.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
21 messaggi dal 28 ottobre 2003
allora, calmi calmi che prima o poi ci arrivo, questo è un ulteriore passo avanti nel comprendere.

in effetti ad uno stesso iditem corrisponde uno stesso nameitem, quindi posso contarli e raggrupparli per nameitem.

sql= "SELECT nameitem,count(*) as numerox from [comments] group by nameitem"

ed in effetti raggiungo quello che volevo...

per ordinarli in base a numerox ? cioè, il nameitem che compare + volte va per primo etc ?

sql= "SELECT nameitem,count(*) as numerox from [comments] group by nameitem order by numerox desc"

non funziona, se ordino x nameitem me li ordina in ordine alfabetico..

poi un altra cosa (e poi chiudo, spero) l'* di count(*), che cosa vuol dire ? di selezionare tutti i campi ? (non credo..??)

grazie mille ancora.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.