Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media
Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media
Intel ha introdotto le CPU Core Ultra 200S "non K" a inizio 2025. I nuovi modelli stanno arrivando sul mercato e abbiamo avuto l'opportunità di provare le soluzioni Core Ultra 5 235 e Core Ultra 5 225F, confrontandole con il Core i5-14400F di precedente generazione. Come si comportano i processori Arrow Lake per la massa? Scopriamolo insieme.
Roborock Saros Z70: un braccio meccanico per fare ordine in casa
Roborock Saros Z70: un braccio meccanico per fare ordine in casa
Dotato di tutte le ultime innovazioni in tema di aspirazione della polvere e pulizia dei pavimenti di casa, Roborock Saros Z70 integra un braccio meccanico che promette di rendere più efficiente la pulizia di casa spostando oggetti presenti sul pavimento e riordinandoli. Una idea bella e pratica, ma che all'atto pratico è pressoché inutilizzabile e dalle ricadute nulle
I nuovi notebook Acer al debutto al Computex 2025
I nuovi notebook Acer al debutto al Computex 2025
Al Computex 2025 di Taipei Acer mostra una completa gamma di soluzioni notebook delle famiglie Swift, Aspire, Predator e Nitro pensati per gli utenti consumer oltre che per coloro che ricercano elevata potenza di elaborazione, per lavorare o per giocare. In base al modello troviamo piattaforme Intel, AMD oppure Qualcomm anche in abbinamento alle nuove GPU NVIDIA GeForce RTX 5000
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-08-2012, 13:32   #1
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5730
[SQL] Una query mySQL che non funge

Ho queste due relazioni:

musei(ID_museo, nome, città, numero_sale, nazione)

quadri(ID_quadro, titolo, periodo, autore, id_museo)

in cui ho evidenziato in grassetto la chiave primaria e in corsivo quella esterna.

Ho una query da risolvere che dice di trovare quali musei hanno un numero di quadri superiore alla media complessiva per quella nazione.

Questo è il mio codice che coincide con quello della soluzione, ma non funziona.

Codice:
SELECT nome,COUNT(*) as tot
FROM Musei M INNER JOIN Quadri Q
ON Q.id_museo=M.ID_museo
GROUP BY M.ID_museo
HAVING tot >
  (
  (SELECT COUNT(*) 
   FROM Quadri
   WHERE Quadri.id_museo=M.ID_museo)
  /
  (SELECT COUNT(*) 
   FROM Quadri
   WHERE Quadri.id_museo=M.ID_museo
   GROUP BY M.nazione)
  )
mysql mi dice che è sconosciuto l'attributo M.nazione nel raggruppamento.

Sapreste indicarmi anche una strategia per risolvere le query annidate molto complesse?

Per quanto riguarda l'uso delle variabili mi potreste chiarire quando è opportuno inserirle nei casi di query annidate?

Grazie.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.

Ultima modifica di zanardi84 : 17-08-2012 alle 16:58.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2012, 14:24   #2
Dânêl
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 485
Nelle due relazioni che hai riportato non esiste alcun attributo nazione, quindi è normale che tu ottenga quell'errore. Se non ci sono altri problemi (non ho provato la query) ti basta sostituire nazione con città, l'unico attributo che gli si avvicina concettualmente.

Forse si tratta di un refuso nella traccia/tabella o, in alternativa, dovrebbe esistere una terza relazione, o un semplice attributo aggiuntivo, che associa ciascuna città ad una nazione
Dânêl è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2012, 14:26   #3
Ashgan83
Senior Member
 
L'Avatar di Ashgan83
 
Iscritto dal: Nov 2004
Messaggi: 1747
Quote:
Originariamente inviato da zanardi84 Guarda i messaggi
Ho queste due relazioni:

musei(ID_museo, nome, città, numero_sale, nazioni)

quadri(ID_quadro, titolo, periodo, autore, id_museo)

in cui ho evidenziato in grassetto la chiave primaria e in corsivo quella esterna.

Ho una query da risolvere che dice di trovare quali musei hanno un numero di quadri superiore alla media complessiva per quella nazione.

Questo è il mio codice che coincide con quello della soluzione, ma non funziona.

Codice:
SELECT nome,COUNT(*) as tot
FROM Musei M INNER JOIN Quadri Q
ON Q.id_museo=M.ID_museo
GROUP BY M.ID_museo
HAVING tot >
  (
  (SELECT COUNT(*) 
   FROM Quadri
   WHERE Quadri.id_museo=M.ID_museo)
  /
  (SELECT COUNT(*) 
   FROM Quadri
   WHERE Quadri.id_museo=M.ID_museo
   GROUP BY M.nazione)
  )
mysql mi dice che è sconosciuto l'attributo M.nazione nel raggruppamento.

Sapreste indicarmi anche una strategia per risolvere le query annidate molto complesse?

Per quanto riguarda l'uso delle variabili mi potreste chiarire quando è opportuno inserirle nei casi di query annidate?

Grazie.


Scusa ma non l'hai chiamato "nazioni" nella tabella? Nella query usi "M.nazione".
__________________
Esistono 10 tipi di persone al mondo: quelli che capiscono il codice binario e quelli che non lo capiscono
Ashgan83 è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2012, 16:58   #4
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5730
Chiedo scusa, è nazione, non nazioni. Correggo anche nel thread iniziale.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2012, 17:06   #5
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da zanardi84 Guarda i messaggi
Codice:
  (SELECT COUNT(*) 
   FROM Quadri
   WHERE Quadri.id_museo=M.ID_museo
   GROUP BY M.nazione)
  )
mysql mi dice che è sconosciuto l'attributo M.nazione nel raggruppamento.
Mi sembra una query molto "creativa" nel suo complesso, ma questa particolare annidata mi lascia perplesso...
Fai un select del conteggio dei quadri raggruppati secondo un attributo che appartiene a un'altra tabella... secondo me l'errore sta in questo... prova a controllare.

ps: per quanto riguarda lo stile, ti consiglio: tutto in minuscolo (ID_museo -> id_museo), e il nome dei campi del tipo "id_xxxx" usarli solo per gli id usati come chiavi primarie. Per esempio nella tabella quadri, avrei messo "museo" e non "id_museo", in quanto quell'attributo è si l'id del museo, ma rappresenta l'intero museo.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 17-08-2012 alle 17:22.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2012, 12:38   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
Quando scrivi

Having tot> (bla bla)

oppure anche quando scrivi

Where qualcosa > (bla bla)

dove quel blabla vuoi che sia una sottoquery, allora questa sottoquery deve restituire uno scalare.

Ovvero nel tuo caso devi far restituire la media dei quadri della nazione del record che stai processando sulla riga master
La Join non la devi fare per museo, ma per nazione.
E ho idea che non ci sara' nessuna GROUP BY
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 18-08-2012 alle 12:41.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2012, 15:36   #7
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
supponendo che le relazioni siano (ho apportato qualche modifica):
Codice:
musei(id_museo, nome, città, numero_sale, nazione)
quadri(id_quadro, titolo, periodo, autore, museo)
questa query dovrebbe funzionare:
Codice:
SELECT y.museo, x.nazione, x.medianaz, y.nqm  FROM (
  SELECT a.nazione, nqn, nmn, nqn/nmn AS medianaz FROM 
    ( SELECT nazione, COUNT(*) AS nqn FROM musei JOIN quadri ON id_museo = museo GROUP BY nazione ) a 
  JOIN
    ( SELECT nazione, COUNT(*) AS nmn FROM musei GROUP BY nazione) b
  ON a.nazione = b.nazione ) x
JOIN (
  SELECT nazione, museo, COUNT(*) AS nqm FROM musei JOIN quadri ON id_museo = museo GROUP BY museo ) y
ON x.nazione = y.nazione
WHERE y.nqm > x.medianaz
ho poca fantasia, e gli alias a,b,x,y ne sono la conseguenza, ovviamente mettici quello che ti pare
nqn = numero quadri nazione
nmn = numero musei nazione
nqm = numero quadri museo
medianaz = media nazionale di quadri per museo

la relazione a conta i quadri per nazione, la relazione b conta il numero di musei per nazione. x è il join di a con b e l'attributo x.medianaz è il rapporto nqn/nmn. x è joinato a y che conta il numero di quadri per ogni museo, dal join x*y tengo solo le tuple in cui nqm > medianaz.

Provato in locale e mi pare che funzioni

ps: non escludo l'esistenza di soluzioni più eleganti con l'uso di funzioni SQL, questa mi è venuta in mente così... e mi sa che esiste più di un modo di scrivere la stessa query che ho scritto sopra.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 18-08-2012 alle 15:41.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2012, 11:31   #8
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5730
Quando dovete formulare una query quali sono i ragionamenti che fate?
Cosa vi fa optare per una subquery?
Quando usare il self join?

Alla fine conosco la sintassi e le definizioni degli operatori, ma non riesco a formulare efficaci interrogazioni.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2012, 13:48   #9
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da zanardi84 Guarda i messaggi
Quando dovete formulare una query quali sono i ragionamenti che fate?
Cosa vi fa optare per una subquery?
Quando usare il self join?

Alla fine conosco la sintassi e le definizioni degli operatori, ma non riesco a formulare efficaci interrogazioni.
Quello che cerchi si studia nella teoria dell'algebra relazionale, ma fondamentalmente non è nulla di così arcano e la vera tecnica si sviluppa col tempo facendo pratica. Comunque già il fatto di renderti conto che l'algebra relazione così come l'SQL hanno molte analogie con il calcolo insiemistico (il join è di fatto un prodotto cartesiano fra gli insiemi che sono le tabelle, è possibile lavorare su interesezioni, unioni, raggruppamenti...) ti permette di capire come usare le interrogazioni.
Non c'e' una regola che ti dice quando usare una sottoquery o un selfjoin, lì sul momento vedi che ti serve... e spesso esistono più strade per raggiungere lo stesso risultato
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2012, 08:26   #10
yuri.f_87
Member
 
L'Avatar di yuri.f_87
 
Iscritto dal: Nov 2007
Messaggi: 143
Ciao, di seguito trovi una delle tante soluzioni possibili.
Codice:
declare @t table (	IdMuseo	int,	
	              Nazione	varchar(50),
		NumQuadMuseo	int
	  )
declare @t2 table ( Nazione varchar(50), 		
               	  AVGQuadNazione	decimal(18,2)
		)
				
insert @t (	IdMuseo ,	
		Nazione	,
		NumQuadMuseo
	)
select	M.ID_museo, 
	M.nazione, 
	COUNT(*) as QuadriMuseo
from	@musei M
	inner join @quadri Q on M.ID_museo = Q.id_museo
group by M.ID_museo, M.nazione

insert into @t2 (	Nazione,
		AVGQuadNazione
	)
select	T.nazione, AVG(convert(decimal(18,2), T.NumQuadMuseo))
from	@t T
group by T.nazione

select	*
from	@t T
where	T.NumQuadMuseo >= (	select	T2.AVGQuadNazione
				from	@t2 T2
				where	T2.nazione = T.nazione
			)
order by T.IdMuseo
Di certo non è la soluzione più veloce (si potrebbe abbastanza facilmente eliminare le tab temporanee), ma secondo me è abbastanza lineare scritta in questo modo.
Ciao,
Yuri.
yuri.f_87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU Arrow Lake per la fascia media Intel Core Ultra 5 235 e Core Ultra 5 225F, CPU ...
Roborock Saros Z70: un braccio meccanico per fare ordine in casa Roborock Saros Z70: un braccio meccanico per far...
I nuovi notebook Acer al debutto al Computex 2025 I nuovi notebook Acer al debutto al Computex 202...
Nutanix .NEXT: così l'azienda vuole aiutare i clienti a limitare la dipendenza da Broadcom Nutanix .NEXT: così l'azienda vuole aiuta...
HUAWEI WATCH FIT 4 Pro: lo smartwatch che non ha rivali a questo prezzo! HUAWEI WATCH FIT 4 Pro: lo smartwatch che non ha...
BMW ha completato il primo test su strad...
Ecco come i big usano la piattaforma IA ...
Pulsee Luce e Gas lancia "Casa Futu...
Polestar semplifica la ricarica in Itali...
Riscaldare meno, risparmiare di pi&ugrav...
BLUETTI Apex 300: la nuova power station...
LG xboom Buds by will.i.am: gli auricola...
Sapphire Phantomlink: il produttore cine...
Tornano gli incentivi auto 2025, e quest...
Nikola, i camion a idrogeno finiscono al...
Space Cadet Pinball: il gioco di WindowX...
Nuovo blackout in Spagna: reti mobili e ...
L'Intelligenza Artificiale fa piazza pul...
Memoria d'acciaio! Lexar presenta le nuo...
Gli USA contro Huawei: "fermiamo la...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v