Domanda Query MySql - Aziende con un numero maggiore a...

Massimo86

Nuovo utente
27 Gennaio 2020
7
1
Excel 2019-MAC
0
Buongiorno,

avrei bisogno di sapere come apliare questa query

SQL:
SELECT `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`, SUM(`DipAz`) as `TotaleDipAz`
FROM `Anagraf_aziende_2019`
WHERE `ProvAz` IN ('CZ')
GROUP BY `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`
ORDER BY `TotaleDipAz` DESC
in maniera tale che oltre alla selezione della ProvAz mi dia anche le aziende dove TotaleDipAz sia maggiore uguale a 50?


Grazie per l'aiuto
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.833
115
Italy
2019
201
Ovvio, non puoi utilizzare un nome ALIAS di una colonna.
In WHERE dovresti utilizzare il nome del campo reale :

Visual Basic:
Where `ProvAz` IN ('CZ') And `DipAz` >= 50
Ma siccome quel valore è calcolato dal SUM() allora devi utilizzare una sotto-query:

Visual Basic:
SELECT `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`, `TotaleDipAz`
  FROM (
    SELECT `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`, SUM(`DipAz`) as `TotaleDipAz`
    FROM `Anagraf_aziende_2019`
    WHERE `ProvAz` IN ('CZ')
    GROUP BY `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`
      )
WHERE `TotaleDipAz` > 50
ORDER BY `TotaleDipAz` DESC
In alternativa puoi usare la clausola HAVING che accetta funzioni di aggregazione. Guarda gli esempio qui:
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.833
115
Italy
2019
201
Powerwin @Powerwin
Infatti la sua query è sbagliata perché quel nome è un ALIAS, che non può essere utilizzato al volo (come ho indicato nel mio post).
 

Massimo86

Nuovo utente
27 Gennaio 2020
7
1
Excel 2019-MAC
0
SELECT `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`, `TotaleDipAz` FROM ( SELECT `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`, SUM(`DipAz`) as `TotaleDipAz` FROM `Anagraf_aziende_2019` WHERE `ProvAz` IN ('CZ') GROUP BY `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz` ) WHERE `TotaleDipAz` > 50 ORDER BY `TotaleDipAz` DESC
Non va...da errore #1248 - Every derived table must have its own alias
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.833
115
Italy
2019
201
Every derived table must have its own alias
Non ho né MySQL, né il tuo database, per cui non posso sapere cosa accade e soprattutto se vi è un errore di sintassi.

Prova eventualmente ad aggiungere
As T1

prima di
WHERE `TotaleDipAz` > 50 ORDER BY `TotaleDipAz` DESC

è comunque un tentativo, non una certezza, SQL Server si arrabbia se non lo indichi, ma in MySQL non lo so.
 

klingklang

Ciappinaro VBA_Expert
Expert
20 Ottobre 2017
5.311
245
43
San Giovanni in Persiceto (BO)
www.excelswissknife.com
2016, 365
389
Grazie giulianovac @giulianovac , davo per scontato (erroneamente) che la sua query fosse corretta cappello_saluta
La query postata dall'utente è corretta. L'alias TotaleDipAz può essere usato validamente nella clausola ORDER BY poiché questa è l'ultima ad essere valutata. WHERE e GROUP BY (oltre a FROM) sono valutate prima di SELECT, pertanto l'alias non esiste ancora nel momento in cui vengono appunto valutate. E' sufficiente ripetere la formula che calcola il valore anziché il suo alias, come ha già scritto scossa @scossa in precedenza
(P.S: MySQL consente di usare gli alias anche nel GROUP BY, ma resta valido il discorso per quanto riguarda il WHERE)
 
Ultima modifica:

klingklang

Ciappinaro VBA_Expert
Expert
20 Ottobre 2017
5.311
245
43
San Giovanni in Persiceto (BO)
www.excelswissknife.com
2016, 365
389
Grazie giulianovac @giulianovac , davo per scontato (erroneamente) che la sua query fosse corretta cappello_saluta
E' sufficiente ripetere la formula che calcola il valore anziché il suo alias, come ha già scritto scossa @scossa in precedenza
Mi correggo e mi schiaffeggio :scoppola:da solo, perché questa sintassi non è valida in MySQL.
Allora la soluzione più semplice è quella prospettata in precedenza da giulianovac @giulianovac , ovvero

SQL:
[...]
GROUP BY `RagioneSociale`, `IndirizzoAz`, `CapAz`, `ComuAz`, `ProvAz`, `RegioneAz`
HAVING `TotaleDipAz` > 50
ORDER BY `TotaleDipAz` DESC
 

scossa

Excel/VBA Expert
Moderatore
Expert
14 Luglio 2015
1.314
50
60
Verona Provincia
scossavr.altervista.org
.
14
Mi unisco e mi schiaffeggio pure io!

ERRATA:
Visual Basic:
Where `ProvAz` IN ('CZ') And SUM(`DipAz`)  >= 50
[/QUOTE]

CORRIGE:
Visual Basic:
Where ....
GROUP BY ...
HAVING SUM(`DipAz`)  >= 50
[/QUOTE]

N.B.: In MS SQL non pui usare l'alias nemmeno nell'HAVING.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!