Newsgroup: it.comp.software.database
Titolo: cout

Salve,
da una tabella del tipo (ometto altri campi per semplicità):
ID  parola
__________
1   auto
1   moto
1   ruota
2   casa
2   villa
.   ....
noto che 'ID' e 'parola' insieme costituiscono la "primary key", è 
possibile in un'unica istruzione sapere quante PAROLE ci sono per ogni 
ID?
Cioè ottenere qualcosa tipo:
ID   totale
___________
1    3
2    2
.    ...
sto usando MySQL 5.
--
rob4you


Select ID,count(Parola)as totale
from <tabella>
group by ID,parola
Prova così! ;-)

 Prova cosě! ;-)
...e dopo prova in quest'altro modo... ;-)
Select ID,count(Parola)as totale
from <tabella>
group by ID
-- 
Luca Bianchi
Microsoft MVP - SQL Server
http://blogs.aspitalia.com/lucabianchi/

 Prova così! ;-)
Con questa non mi va, se invece elimino il grouping per parola va. :-)
--
rob4you

 group by ID
It works! :-)
--
rob4you

Approfitto di questo thread per estendere un mio dubbio, complicando le 
cose. :-)
La tabella "parole" è così fatta:
catID     parola     occorrenze
________________________________
1          audi        154
1          alfa         95
1          bmw         132
2          gomme        56
2          audi         80
In pratica, ho:
- un ID che specifica una data categoria
- una PAROLA
- il numero di OCCORRENZE di quella PAROLA in catID
'catID' e 'parola' insieme costituiscono la chiave primaria.
Io voglio arrivare a ottenere qualcosa di questo tipo:
catID    parola    occorr    parola_tot    tot_in_catID
________________________________________________________
1         audi      154       (154+80)          3
2         audi       80       (154+80)          2
Ovviamente ho messo i numeri fra parentesi invece del loro risultato 
solo per farvi capire come dovrebbe essere ottenuto il numero 
all'interno di quei campi.
Nello specifico:
- parola_tot: indica la somma del numero di occorrenze per una stessa 
parola (nel nostro esempio 154+80)
- tot_in_catID: indica la somma del numero di parole appartenenti a una 
data categoria
E' possibile realizzare questa cosa?
Sto usando mysql.
--
rob4you

 ...e dopo prova in quest'altro modo... ;-)
Hai ragione!!
:-(
Chiedo venia

Se non ti fa troppo schifo ti propongo due query in cascata
Prima
SELECT parola, sum(occorrenza) as somma, count(*) as conta
FROM Tabella
GROUP BY parola
HAVING count(*)>1;
Il risultato di questa query in "Query", poi
SELECT Tabella.catID, Tabella.Parola, Tabella.Occorrenza, Query.somma, 
Query.conta
FROM Tabella, Query
WHERE Tabella.Parola=Query.parola;
Ciao
Cricca 

Prima
SELECT parola, sum(occorrenza) as somma, count(*) as conta
FROM Tabella
GROUP BY parola
HAVING count(*)>1;
Il risultato di questa query in "Query", poi
SELECT Tabella.catID, Tabella.Parola, Tabella.somma, Query.conta,


 WHERE Tabella.Parola=Query.parola;
L'ultima parte mi è chiara, solo non mi è chiaro appunto cosa scrivere 
in pratica al posto di "Query".
--
rob4you

 ehm...come ce lo metto l'intero risultato in query?
Hai ragione! Scusa!
Ricomincio da capo
CREATE VIEW Query AS
SELECT parola, sum(occorrenza) AS occo, count(*) AS conta
FROM Tabella
GROUP BY parola
HAVING count(*)>1;
SELECT Tabella.catID, Tabella.Parola, Tabella.Occorrenza, Query.occo, 
Query.conta
FROM Tabella, Query
WHERE Tabella.Parola=Query.parola;
Ciao 


se vuoi tutto in una sola query (senza temporanee)
ovvero se non ti fanno schifo le subquery,
prova questa:
SELECT T3.catID, T1.parola, T2.occorrenze, T1.parola_tot,
T3.tot_in_catID
FROM (
	SELECT parola, SUM( occorrenze) AS parola_tot
	FROM testTable
	GROUP BY parola) T1
JOIN testTable T2 ON
	T1.parola = T2.parola
JOIN (
	SELECT catID, COUNT( *) AS tot_in_catID
	FROM testTable
	GROUP BY catID
) T3 ON
	T2.catID = T3.catID
GROUP BY T3.catID, T1.parola, T2.occorrenze, totocc, sumcat

> totocc, sumcat
Qui non definisci cosa sono questi due campi. :-)
Modificandoli in due campi esistenti, la query ci impiega più di sei 
secondi per completare, ma non è esattamente ciò che volevo. :-)
Se interessa a qualcuno, ho comunque risolto così:
SELECT catID as ID,parola,occorrenze,t.somma,occorrenze/t.somma as 
divis,
@x:=(SELECT count(*) FROM parole WHERE catID=ID GROUP BY catID) as tot,
occorrenze/t.somma/@x as divis_tot FROM parole,
(SELECT sum(occorrenze) as somma FROM parole WHERE parola='audi') as t
WHERE parola='audi' ORDER BY divis_tot DESC;
--
rob4you