PDA

View Full Version : interrogazione sql


Zebra75
21-02-2007, 13:57
data la seguente interrogazione:

SELECT cf, COUNT(*) FROM miatabella GROUP BY cf

che mi ritorna una nuova relazione fatta così:

1
3
5
7

come si fa a farsi ritornare solo il valore 7 e non tutti i valori ?

andbin
21-02-2007, 14:46
come si fa a farsi ritornare solo il valore 7 e non tutti i valori ?SELECT cf, COUNT(*) FROM miatabella GROUP BY cf HAVING COUNT(*)=7

Zebra75
21-02-2007, 14:49
SELECT cf, COUNT(*) FROM miatabella GROUP BY cf HAVING COUNT(*)=7

scusa, forse ti ho depistato ma il valore 7 l'ho specificato come esempio, ma nella realtà non è noto a priori il valore massimo

wisher
21-02-2007, 14:51
prova ad aggiungere ORDER BY cf DESC LIMIT 1;

trallallero
21-02-2007, 14:57
scusa, forse ti ho depistato ma il valore 7 l'ho specificato come esempio, ma nella realtà non è noto a priori il valore massimo

SELECT cf, COUNT(*) FROM miatabella GROUP BY cf HAVING COUNT(*)=&n

EDIT:
se invece vuoi solo quelli con il count(*) massimo fai:


SELECT cf, COUNT(*)
FROM miatabella
GROUP BY cf
HAVING COUNT(*) =
(
SELECT MAX(COUNT(*))
FROM miatabella
GROUP BY cf
)

non l'ho testata ma dovrebbe andare ;)

Zebra75
21-02-2007, 20:54
SELECT cf, COUNT(*) FROM miatabella GROUP BY cf HAVING COUNT(*)=&n

EDIT:
se invece vuoi solo quelli con il count(*) massimo fai:


SELECT cf, COUNT(*)
FROM miatabella
GROUP BY cf
HAVING COUNT(*) =
(
SELECT MAX(COUNT(*))
FROM miatabella
GROUP BY cf
)

non l'ho testata ma dovrebbe andare ;)



ERROR: aggregate function calls may not be nested

le funzioni aggregate non possono essere nidificate :confused:

trallallero
22-02-2007, 07:21
ERROR: aggregate function calls may not be nested

le funzioni aggregate non possono essere nidificate :confused:


1 select Y, count(*)
2 from prova
3 group by Y
4 having count(*) =
5* ( select max(count(*)) from prova group by Y)

SQL> /

Y COUNT(*)
---------- ----------
ciccio 4


a me va. Che db hai ?

Zebra75
22-02-2007, 07:51
uso postgres

Zebra75
22-02-2007, 09:17
funziona con una leggera modifica al tuo codice :)

SELECT cf, COUNT(*)
FROM miatabella
GROUP BY cf
HAVING COUNT(*) >= ALL
(
SELECT COUNT(*)
FROM miatabella
GROUP BY cf
)

trallallero
22-02-2007, 09:33
uso postgres

non conosco :)

Zebra75
26-02-2007, 07:52
ragazzi un altra dritta

CLIENTE (Nr.telefono, Nome, Indirizzo)
ORDINE (Nr.telefono, Codice-Pizza, Codice-Operatore, Data, Costo)
PIZZA (Codice-Pizza, Nome, Prezzo)

Si richiede di formulare in SQL quanto segue:
determinare per ogni operatore e ogni pizza il costo totale degli ordini effettuati;


SELECT codicepizza, sum(costo) FROM ORDINE GROUP BY codicepizza;

e con questa query estraggo il costo totale per ogni tipo di pizza venduta ma, come diamine ci inserisco l'operatore ?
La query è anche sbagliata perchè nella somma non tiene conto di operatori differenti :muro:

trallallero
26-02-2007, 08:36
Se ti puó aiutare In Oracle sarebbe qualcosa del genere, ma mi sa che manca qualcosa (non posso testare)

SELECT
O.operatore OPERATORE,
P.nome PIZZA ,
SUM(O.costo) TOTALE
FROM
ordine O,
pizza P
WHERE
O.codicepizza = P.codicepizza
GROUP BY
O.operatore,
O.telefono,
P.nome
;