Vai al contenuto

Una query tanto semplice quanto impossibileUniversitario triste inside


  • Non puoi aprire una nuova discussione
  • Effettua l'accesso per rispondere
Questa discussione ha avuto 8 risposte

#1
Roxas93

Roxas93
  • Kingdom Hearts Eye Fan

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 16767

Ok, ragazzi, io ormai non so più che pesci pigliare.

 

Ho fatto lo scritto di DB all'uni e l'ho fatto perfetto tranne UNA query. La prof non mi passa l'esame se non gliela porto.

 

La query io l'ho fatta bene, solo che non l'ho fatta "come lei voleva".

 

msnp6h.jpg

 

La lettera D

 

Determinare il settore con il maggior numero di medicinali (in output deve esserci solo SETTORE).

 

Io nel compito ho fatto un Count, un order by desc e un limit 1... semplice semplice e funzionante.

 

Lei non vuole che venga usato il limit 1... dunque come minchia si fa? È impossibile

 

Ho provato a fare

SELECT settore, MAX(counted) 
FROM medicinali, (SELECT COUNT(*) as counted FROM medicinali GROUP BY settore) as counts
 
E funziona... però in output mi da sia il settore che il max(counted... quest'ultimo non deve esserci :doson:
 

 



#2
Tiagullo

Tiagullo
  • L'uomo Dei Notebook!

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: [Mod]Moderatore
  • Messaggi: : 14976

Se stasera riesco, provo a farne una io se mi ricordo ancora un pò di sql :asd:



#3
Roxas93

Roxas93
  • Kingdom Hearts Eye Fan

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 16767

Ma le so fare tutte... a me interessa principalmente la D :D



#4
Roxas93

Roxas93
  • Kingdom Hearts Eye Fan

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 16767

Diciamo che ci sono riuscito

 

(sostituito settore con categoria e medicinali con ricambi)

 

SELECT ricambi.categoria
FROM ricambi, (SELECT COUNT(*) as counted FROM ricambi GROUP BY categoria) as counts
 
having max(counted) >= all (SELECT COUNT(*) as counted FROM ricambi GROUP BY categoria)
 
 
Funziona perfettamente, però quella doppia subquery non me la racconta giusta... ci deve essere un modo per minimizzare


#5
Roxas93

Roxas93
  • Kingdom Hearts Eye Fan

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 16767

Up: non funziona quelal scritta da me :doson: Vi prego aiutatemi :doson:



#6
Rovo dei rovi

Rovo dei rovi
  • HardBlackEye

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 17665

Cioè non ti passa l'esame per un solo punto dell'esercizio? Wut?

Bello Basi di Dati.. pareva interessante come corso.
Peccato che ho la testa di cacca :(



#7
SuperZa

SuperZa
  • Sua Maestą Quel Za Eye

  • StellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 6680

SELECT Top (1) Settore, COUNT(1) AS Numero

FROM Medicinali

GROUP BY Settore

ORDER BY Numero DESC

 

 

e' in t-sql, e da quello che so il campo con il numero sei costretto ad averlo altrimenti non puoi metterlo nell'order by



#8
sims

sims
  • Strong Eye Fan

  • StellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 856

Una cosa del genere?

 

select settore from (                                                                                                                    ; PASSO 3 --- seleziono solo il campo settore

          select settore, frequenza from (                                                                                        ; PASSO 2 --- seleziono la coppia settore e frequenza che presenta la frequenza più alta (vedi where successivo)

                    select settore, count(*) as frequenza from medicinali group by settore                  ; PASSO 1 --- lista non ordinata dei settori e della loro numerosità nella tabella medicinali

           ) where frequenza=max(frequenza)

)

 

 

La condizione di non utilizzo del LIMIT può derivare dal fatto che possono esistere più settori che presentano lo stesso numero massimo di medicinali, pertanto con il limit ne prendi solo uno a caso e non tutti


Modificata da sims, 19 September 2014 - 06:24 PM.


#9
Roxas93

Roxas93
  • Kingdom Hearts Eye Fan

  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • Gruppo: Utente Pro
  • Messaggi: : 16767

Ragazzi risolto utilizzando due count :doson: sono commosso :doson:

 

SELECT categoria,count(*)

FROM ricambi

GROUP BY categoria

HAVING count(*)>=ALL (SELECT count(*)

FROM ricambi

GROUP BY categoria)






Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi

Logo