Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MySQL

71 views
Skip to first unread message

Alessandra Marino

unread,
Feb 9, 2024, 12:31:56 PM2/9/24
to
Ciao a tutti non riesco a risolvere questa query, la traccia è la seguente:
Si scriva una query per confrontare i costi alberghieri totali dei ricoveri dell’anno scorso con quelli di due anni fa.
SELECT year(date())-2 as anno,sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo, count(*) as num_ricoveri
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-2) AND r.reparto=rep.codice
UNION
SELECT year(date())-1 as anno,sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as costo
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-1) AND r.reparto=rep.codice

questa sarebbe la soluzione proposta, ma inserita su mySQL risulta errata.
Grazie a tutti.

Bruno Campanini

unread,
Feb 10, 2024, 12:20:43 PM2/10/24
to
Alessandra Marino brought next idea :
Ti funziona almeno una delle due query (quella dell'anno scorso
o quella di due anni fa?)

Io direi di no.

Bruno

Alessandra Marino

unread,
Feb 10, 2024, 12:53:41 PM2/10/24
to
ciao scusami ma la soluzione proposta non lho scritta io, sapresti dirmi perché risulta errata?
Grazie.

Bruno Campanini

unread,
Feb 10, 2024, 2:55:26 PM2/10/24
to
Alessandra Marino submitted this idea :
Non mi risulta errata: ho l'impressione debba esserlo.
Ci sono molti As (il che significa combinazioni/operazioni
su campi a formare campi virtuali), degli asterischi che
a volte indicato qualunque elemento come in Count(*), altre
volte il segno algebrico di prodotto ome in
sum( (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo...

Io conosco Access ma non MySql, quindi di quest'ultimo non
so giudicare ortografia e sintassi.
Non puoi mettere online quelle quattro tabelle striminzite?

Bruno

Ammammata

unread,
Feb 11, 2024, 8:44:30 AM2/11/24
to
Il giorno Fri 09 Feb 2024 06:31:54p, *Alessandra Marino* ha inviato
su it.comp.appl.access il messaggio
news:53895c9e-a530-4e81...@googlegroups.com. Vediamo
cosa ha scritto:

> SELECT year(date())-2 as anno,sum(
> (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo,
> count(*) as num_ricoveri FROM ricoveri r, reparti rep
> WHERE year(r.data_uscita)=(year(date())-2) AND
> r.reparto=rep.codice UNION
> SELECT year(date())-1 as anno,sum(
> (r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as
> costo FROM ricoveri r, reparti rep
> WHERE year(r.data_uscita)=(year(date())-1) AND
> r.reparto=rep.codice
>

conosco un po' il SQL di MS, non mi piacciono le due tabelle nei FROM,
non è specificato in base a quali campi sono collegate (con un JOIN)

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Ammammata

unread,
Feb 11, 2024, 8:46:34 AM2/11/24
to
Il giorno Sun 11 Feb 2024 02:44:27p, *Ammammata* ha inviato su
it.comp.appl.access il messaggio
news:XnsB11595F3CA379am...@127.0.0.1. Vediamo cosa ha
scritto:

> Il giorno Fri 09 Feb 2024 06:31:54p, *Alessandra Marino* ha
> inviato su it.comp.appl.access il messaggio
> news:53895c9e-a530-4e81...@googlegroups.com.
> Vediamo cosa ha scritto:
>
>> SELECT year(date())-2 as anno,sum(
>> (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo,
>> count(*) as num_ricoveri FROM ricoveri r, reparti rep
>> WHERE year(r.data_uscita)=(year(date())-2) AND
>> r.reparto=rep.codice UNION
>> SELECT year(date())-1 as anno,sum(
>> (r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as
>> costo FROM ricoveri r, reparti rep
>> WHERE year(r.data_uscita)=(year(date())-1) AND
>> r.reparto=rep.codice
>>
>
> conosco un po' il SQL di MS, non mi piacciono le due tabelle nei
> FROM, non è specificato in base a quali campi sono collegate (con
> un JOIN)
>

FROM ricoveri r
INNER JOIN reparti rep on rep.codice=r.reparto

BFS

unread,
Feb 12, 2024, 1:54:40 AM2/12/24
to
Il 11/02/2024 14:46, Ammammata ha scritto:
> Il giorno Sun 11 Feb 2024 02:44:27p, *Ammammata* ha inviato su
> it.comp.appl.access il messaggio
> news:XnsB11595F3CA379am...@127.0.0.1. Vediamo cosa ha
> scritto:
>
>> Il giorno Fri 09 Feb 2024 06:31:54p, *Alessandra Marino* ha
>> inviato su it.comp.appl.access il messaggio
>> news:53895c9e-a530-4e81...@googlegroups.com.
>> Vediamo cosa ha scritto:
>>
>>> SELECT year(date())-2 as anno,sum(
>>> (r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo,
>>> count(*) as num_ricoveri FROM ricoveri r, reparti rep
>>> WHERE year(r.data_uscita)=(year(date())-2) AND
>>> r.reparto=rep.codice UNION
>>> SELECT year(date())-1 as anno,sum(
>>> (r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as
>>> costo FROM ricoveri r, reparti rep
>>> WHERE year(r.data_uscita)=(year(date())-1) AND
>>> r.reparto=rep.codice
>>>
>>
>> conosco un po' il SQL di MS, non mi piacciono le due tabelle nei
>> FROM, non è specificato in base a quali campi sono collegate (con
>> un JOIN)
>>
>
> FROM ricoveri r
> INNER JOIN reparti rep on rep.codice=r.reparto
>

in mysql se rep.codice e r.reparto sono lo stesso valore identificativo
puoi fare a meno del join

basta metterli in where come nella soluzione descritta.
BFS




BFS

unread,
Feb 12, 2024, 1:55:34 AM2/12/24
to
che errore ti da?
hai costruito le due tabelle ricoveri e reparti con i campi oggetto
della query?
inoltre in mysql occhio al maiuscolo/minuscolo

BFS

Ammammata

unread,
Feb 12, 2024, 3:13:28 AM2/12/24
to
BFS laid this down on his screen :
>>> conosco un po' il SQL di MS, non mi piacciono le due tabelle nei
>>> FROM, non è specificato in base a quali campi sono collegate (con
>>> un JOIN)
>>>
>>
>> FROM ricoveri r
>> INNER JOIN reparti rep on rep.codice=r.reparto
>>
>
> in mysql se rep.codice e r.reparto sono lo stesso valore identificativo puoi
> fare a meno del join
>
> basta metterli in where come nella soluzione descritta.

questo "join invisibile" di MySQL presuppone che entrambi i campi siano
indicizzati, chiavi univoche o altro?

BFS

unread,
Feb 12, 2024, 4:26:51 AM2/12/24
to
Il 12/02/2024 09:13, Ammammata ha scritto:
> BFS laid this down on his screen :
>>>> conosco un po' il SQL di MS, non mi piacciono le due tabelle nei
>>>> FROM, non è specificato in base a quali campi sono collegate (con
>>>> un JOIN)
>>>>
>>>
>>> FROM ricoveri r
>>> INNER JOIN reparti rep on rep.codice=r.reparto
>>>
>>
>> in mysql se rep.codice e r.reparto sono lo stesso valore
>> identificativo puoi fare a meno del join
>>
>> basta metterli in where come nella soluzione descritta.
>
> questo "join invisibile" di MySQL presuppone che entrambi i campi siano
> indicizzati, chiavi univoche o altro?
>


indice no
univoco neppure

esempio
hai una tabella companies con un idcliente
una tabella user con un idcliente (tabella che contiene tutti i
dipendenti delle aziende)

in sqlserver/access faresti

select ....from companies inner join user on
companies.idcliente=users.idcliente

in mysql puoi fare cosi

SELECT ... FROM users a , companies b where a.idCliente=b.idCliente


BFS

Alessandra Marino

unread,
Feb 12, 2024, 4:36:28 AM2/12/24
to
Ciao, purtroppo ho un datebase che è privato, poichè è stato creato dall'insegnante del mio corso, comunque nelle tabelle sono presenti i seguenti dati:
RICOVERI: codice fiscale paziente, codice fiscale medico, data ingresso, data uscita, drg, id ricovero (chiave della tabella), numero reparto, diagnosi ricovero.
REPARTI: numero reparto(chiave della tabella), nome reparto, costo giornaliero, numero letti.

Alessandra Marino

unread,
Feb 12, 2024, 4:39:26 AM2/12/24
to
ciao, ho visto su internet che l'insegnante del mio corso utilizza il vecchio linguaggio di my sql, e nel mio caso per collegare la from con le join nella where usiamo l'alias che diamo nella from--> from ricoveri R, reparti REP where R.numero_reparto=REP.numero_reparto

Alessandra Marino

unread,
Feb 12, 2024, 4:41:37 AM2/12/24
to
non ho mai visto durante il corso l'inner join, penso sia il nuovo linguaggio per my sql?

Alessandra Marino

unread,
Feb 12, 2024, 4:44:22 AM2/12/24
to
mi dice che ho un errore nella compilazione del linguaggio, ma non specifica dove, penso sia nella date(), perchè da sempre errore con quella. Per il maiuscolo/minuscolo da problemi solo se nella from il nome delle tabelle è in maiuscolo. grazie a tutti.

BFS

unread,
Feb 12, 2024, 4:46:41 AM2/12/24
to
inner join left join e right join son sempre esistiti a mia memoria in mysql

BFS

BFS

unread,
Feb 12, 2024, 4:53:46 AM2/12/24
to
date() non esiste in mysql
se il tuo intento è ottenere l'anno del giorno corrente usa

year(current_date())


BFS

BFS

unread,
Feb 12, 2024, 5:12:56 AM2/12/24
to
Il 09/02/2024 18:31, Alessandra Marino ha scritto:
ma per chiarezza

il professore chiede:
Si scriva una query per confrontare i costi alberghieri totali dei
ricoveri dell’anno scorso con quelli di due anni fa.


e tu hai buttato giu questo?

SELECT year(date())-2 as anno,sum(
(r.data_uscita-r.data_ingresso)*rep.costo_giorno) as costo, count(*) as
num_ricoveri
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-2) AND r.reparto=rep.codice
UNION
SELECT year(date())-1 as anno,sum(
(r.data_uscita-r.data_ingresso)*rep.costo_giorno), count(*) as costo
FROM ricoveri r, reparti rep
WHERE year(r.data_uscita)=(year(date())-1) AND r.reparto=rep.codice

o la query di unione fa parte della traccia del professore?



BFS






Ammammata

unread,
Feb 12, 2024, 8:41:10 AM2/12/24
to
BFS wrote on 12/02/2024 :
> in sqlserver/access faresti
>
> select ....from companies inner join user on
> companies.idcliente=users.idcliente
>
> in mysql puoi fare cosi
>
> SELECT ... FROM users a , companies b where a.idCliente=b.idCliente

ok, chiaro, personalmente preferisco che la relazione di join sia
espressa nell'elenco delle tabelle piuttosto che nella condizione
where, in modo da averla sotto il naso subito per eventuali controlli

il where lo lascerei solo per impostare ulteriori condizioni

BFS

unread,
Feb 12, 2024, 8:52:24 AM2/12/24
to
Il 12/02/2024 14:41, Ammammata ha scritto:
> BFS wrote on 12/02/2024 :
>> in sqlserver/access faresti
>>
>> select ....from companies inner join user on
>> companies.idcliente=users.idcliente
>>
>> in mysql puoi fare cosi
>>
>> SELECT ... FROM users a , companies b where a.idCliente=b.idCliente
>
> ok, chiaro, personalmente preferisco che la relazione di join sia
> espressa nell'elenco delle tabelle piuttosto che nella condizione where,
> in modo da averla sotto il naso subito per eventuali controlli
>
> il where lo lascerei solo per impostare ulteriori condizioni
>


concordo
BFS

Bruno Campanini

unread,
Feb 12, 2024, 10:27:01 AM2/12/24
to
on 12-02-24, Ammammata supposed :
> BFS wrote on 12/02/2024 :
>> in sqlserver/access faresti
>>
>> select ....from companies inner join user on
>> companies.idcliente=users.idcliente
>>
>> in mysql puoi fare cosi
>>
>> SELECT ... FROM users a , companies b where a.idCliente=b.idCliente
>
> ok, chiaro, personalmente preferisco che la relazione di join sia espressa
> nell'elenco delle tabelle piuttosto che nella condizione where, in modo da
> averla sotto il naso subito per eventuali controlli
>
> il where lo lascerei solo per impostare ulteriori condizioni

Ma, giusto una domanda: sto c.... di MySql non ce l'ha
una griglia QBE (Query by Example) come quella di Access?

Bruno

Ammammata

unread,
Feb 17, 2024, 10:47:24 AM2/17/24
to
Il giorno Mon 12 Feb 2024 10:39:25a, *Alessandra Marino* ha inviato
su it.comp.appl.access il messaggio
news:7b79e090-9b2c-4969...@googlegroups.com. Vediamo
cosa ha scritto:

> ho visto su internet che l'insegnante del mio corso utilizza il
> vecchio linguaggio di my sql, e nel mio caso per collegare la from
> con le join nella where usiamo l'alias che diamo nella from-->
> from ricoveri R, reparti REP where
> R.numero_reparto=REP.numero_reparto
>

sì, gli alias li uso praticamente sempre per non portarmi dietro il
nome delle tabelle ogni volta che mi serve un campo
le persona con cui lavoro usano il metodo "alfabetico" usando gli alias
a, b, c, d, eccetera oppure quello progrressivo t0, t1, t2, t3 eccetera
personalmente preferisco quello alfabetico ma con un certo riferimento
alla tabella stessa

p.e. in SAP Business One

select *
from ORDR h
inner join RDR1 r on r.DocEntry = h.DocEntry
inner join OCRD bp on bp.CardCode = h.CardCode
inner join OITM p on p.ItemCode = r.Itemcode

dove ORDR sono le testate degli ordini (h-eaders), RDR1 sono le righe
(r-ows), OCRD è l'anagrafica dei clienti (b-usiness p-artners) e OITM è
l'anagrafica degli articoli (p-roducts)

nella query i nomi dei campi preceduti da h, r, bp o p mi fanno capire
meglio dove sto andando a prendere il valore

Alessandra Marino

unread,
Feb 17, 2024, 12:52:14 PM2/17/24
to
salve, non ho mai usato access, quindi non saprei. Grazie

Bruno Campanini

unread,
Feb 17, 2024, 2:02:33 PM2/17/24
to
Alessandra Marino formulated the question :
La mia domanda era pleonastica.
È evidente che MySQL una griglia QBE non ce l'ha...
diversamente sarebbe stata la cosa che per prima
avresti imparato ad usare.
Io non ho mai fatto una Query a mano, never!
nemmeno le più facili.

Per chi vuole programmare la ritengo la cosa
migliore di tutto l'MS Office.

Bruno
0 new messages