PDA

Visualizza la versione completa : MySQL, Operatori Aggregati COUNT, SUM, MIN, MAX, AVG, ecc. non funzionano


vegetablu
22-04-2016, 15:46
Ciao a tutti.
Stavo studiando gli operatori aggregati di MySQL, quali COUNT, SUM, MAX, MIN, AVG, ecc. ma ho riscontrato dei problemi.
Mi esce sempre un errore. Ho fatto un casino di prove ma non capisco se e dove sbaglio.
Sto seguendo il libro Basi di dati Modelli e linguaggi di interrogazione terza edizione, della McGraw-Hill.

Ad ora gli esempi hanno funzionato tutti, tranne questo e non capisco il perchč.
Dice errore 1064.
Vi allego uno screen.

Mi potete dare una mano a capire dov'č l'errore?
Ringrazio anticipatamente tutti.
27042

k.b
22-04-2016, 16:02
1064 e' un errore di sintassi, scrivi quali query hai eseguito (lo screenshot e' troppo piccolo, non si vede niente).

Intanto sposto in database, visto che la domanda con PHP non c'entra nulla (magari leggere il regolamento prima di postare non sarebbe una brutta cosa).

vegetablu
22-04-2016, 16:06
Dopo tanti sforzi e dopo avervi scritto sono riuscito a risolvere l'errore che sul libro non viene citato.
Gli operatori aggregati vanno sempre "ridenominati" con as.

Lo scrivo per avere una conferma di voi e per aiutare altri utenti che sono incappati nel mio stesso problema ;)

vegetablu
22-04-2016, 16:08
1064 e' un errore di sintassi, scrivi quali query hai eseguito (lo screenshot e' troppo piccolo, non si vede niente).

Intanto sposto in database, visto che la domanda con PHP non c'entra nulla (magari leggere il regolamento prima di postare non sarebbe una brutta cosa).

Scusa il disagio. Pensavo fosse inerente.
Il forum non mi fa caricare immagini pių grandi di 100kb.

Cmq scrivo qui la sintassi.

select count (*)
from Impiegato
where Dipart = 'Produzione'

vegetablu
22-04-2016, 16:11
Aggiorno.
Non ho risolto per tutto, ma solo una parte.
Se scrivo:

SELECT COUNT (*)
FROM Impiegato
WHERE Dipart = 'Produzione'

Esce errore #1064

vegetablu
22-04-2016, 16:18
L'errore che ho commesso č il seguente:
tra l'operatore aggregato e la parentesi non ci devono essere spazi vuoti.

vegetablu
29-04-2016, 13:04
Ciao a tutti, ho nuovamente problemi ma questa volta con le interrogazioni di tipo insiemistico e interrogazioni nidificate.

PhpMyAdmin mi restituisce errori.
Vi scrivo le query e gli script che mi danno errori.

1) UNION ALL:

SELECT Nome
FROM Impiegato
WHERE Dipart <> 'Amministrazione'
UNION all
SELECT Cognome
FROM Impiegato
WHERE Dipart <> 'Amministrazione'

Errore riportato: all viene segnato in rosso e il risultato dell'interrogazione non č corretto in quanto spuntano solo i nomi e non i cognomi.

2)INTERSECT

SELECT Nome
FROM Impiegato
intersect
SELECT Cognome
FROM Impiegato

Errore riportato: intersect viene evidenziato in rosso e mi vengono fuori tutti i nomi degli impiegati.

3)EXCEPT

SELECT Nome
FROM Impiegato
except
SELECT Cognome
FROM Impiegato

Errore riportato: risultato uguale ad intersect.

4)ALL in interrogazioni nidificate:


SELECT NomeDipartimento
FROM Dipartimento
WHERE NomeDipartimento <>all (SELECT Dipart
FROM Impiegato
WHERE Cognome = 'Rossi')

Errore riportato: #1064




Tabella e dati IMPIEGATO:


CREATE TABLE `Impiegato` (
`Nome` varchar(20) NOT NULL,
`Cognome` varchar(20) NOT NULL,
`Dipart` varchar(20) NOT NULL,
`Ufficio` smallint(6) DEFAULT '0',
`Stipendio` smallint(6) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dump dei dati per la tabella `Impiegato`
--

INSERT INTO `Impiegato` (`Nome`, `Cognome`, `Dipart`, `Ufficio`, `Stipendio`) VALUES
('Carlo', 'Bianchi', 'Produzione', 20, 36),
('Carlo', 'Rossi', 'Direzione', 14, 80),
('Franco', 'Neri', 'Distribuzione', 16, 45),
('Giovanni', 'Verdi', 'Amministrazione', 20, 40),
('Lorenzo', 'Gialli', 'Direzione', 7, 73),
('Marco', 'Franco', 'Produzione', 20, 46),
('Mario', 'Rossi', 'Amministrazione', 10, 45),
('Paola', 'Rosati', 'Amministrazione', 75, 40);


Tabella e dati DIPARTIMENTO:


CREATE TABLE `Dipartimento` (
`NomeDipartimento` varchar(30) NOT NULL,
`Edificio` int(11) NOT NULL,
`AuleTot` int(11) DEFAULT '0',
`Piani` smallint(6) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dump dei dati per la tabella `Dipartimento`
--

INSERT INTO `Dipartimento` (`NomeDipartimento`, `Edificio`, `AuleTot`, `Piani`) VALUES
('Amministrazione', 0, 0, 0),
('Architett.', 7, 11, NULL),
('Architettura', 2, 6, 1),
('Beni Culturali', 16, 20, 2),
('Chimica', 22, 9, 1),
('Direzione', 0, 0, 0),
('Distribuzione', 0, 0, 0),
('Economia', 9, 16, NULL),
('Giurisprudenza', 23, 40, 2),
('Ingegneria', 8, 5, NULL),
('Lingue', 2, 14, NULL),
('Medicina', 4, 7, NULL),
('Produzione', 0, 0, 0),
('Sc.Educaz.', 15, 20, NULL),
('Scienze Educazione', 15, 15, 2);



Grazie a tutti per l'aiuto.

URANIO
29-04-2016, 15:29
Per le prime 3


SELECT Nome as A
FROM Impiegato
WHERE Dipart <> 'Amministrazione'
UNION all
SELECT Cognome as A
FROM Impiegato
WHERE Dipart <> 'Amministrazione'


Per la 4 prova a mettere uno spazio tra ALL e <>


SELECT NomeDipartimento
FROM Dipartimento
WHERE NomeDipartimento <> all (SELECT Dipart
FROM Impiegato
WHERE Cognome = 'Rossi')

vegetablu
29-04-2016, 16:59
Per le prime 3


SELECT Nome as A
FROM Impiegato
WHERE Dipart <> 'Amministrazione'
UNION all
SELECT Cognome as A
FROM Impiegato
WHERE Dipart <> 'Amministrazione'

Stesso identico risultato, ovvero mancano i cognomi degli impiegati.
27072



Per la 4 prova a mettere uno spazio tra ALL e <>


SELECT NomeDipartimento
FROM Dipartimento
WHERE NomeDipartimento <> all (SELECT Dipart
FROM Impiegato
WHERE Cognome = 'Rossi')

Stesso errore di prima.
27070

Ti allego gli screen cosė potrai capire meglio cosa mi spunta.
Grazie mille.

badaze
29-04-2016, 22:18
Per la 4


SELECT NomeDipartimento
FROM Dipartimento
WHERE NomeDipartimento NOT IN (SELECT Dipart
FROM Impiegato
WHERE Cognome = 'Rossi')

Loading