-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SQL] determinare ID feature corrispondenti ai valori risultanti della funzione di aggregazione max #225
Comments
@pigreco scrivo senza fare test. Ma non puoi fare due left join tra l'output di
e la tabella di input? |
è quello che sto facendo, ma se ci fossero due valori max uguali (esempio pk_uid 6 e 8 per il campo ecco esempio: SELECT pk_uid, t.nome
FROM
(
SELECT
nome,
max(lg) AS lg_max,
max(ln) AS ln_max
FROM
dataset_test
GROUP BY
1
) t
LEFT JOIN
dataset_test
ON ln_max = ln |
@pigreco una piccola correzione: il JOIN con doppia condizione, può essere semplice JOIN e non LEFT |
Una piccola nota carina di uso di Miller. Se arrivi all'output SQL di base
e vuoi unire in due record 7307, avendo un cella con i due valor di IDLN, puoi lanciare
e avere
Il passaggio fondamentale è passare da wide a long con
Poi rimuovo eventuali valori di |
Una soluzione al quesito: WITH calcolo_max AS (
SELECT
NOME,
max(lg) AS lg_max,
max(ln) AS ln_max
FROM
dataset_test
GROUP BY
NOME
)
SELECT
calcolo_maxdue.NOME,
id_lg_max,
lg_max,
PK_UID AS id_ln_max,
ln_max
FROM
(
SELECT
calcolo_max.NOME,
lg_max,
ln_max,
PK_UID AS id_lg_max
FROM
calcolo_max
JOIN dataset_test f ON calcolo_max.NOME = f.NOME
AND calcolo_max.lg_max = f.LG
) calcolo_maxdue
JOIN dataset_test f ON calcolo_maxdue.NOME = f.NOME
AND calcolo_maxdue.ln_max = f.LN |
ricetta fatta e pubblicata https://tansignari.opendatasicilia.it/ricette/query/id_valori_max/ |
non sono sicuro di avere capito tutto, ma non puoi fare un distinct alla fine? |
ho riaperto per tenerne traccia |
questa query mi aiuta molto nel ragionamento SELECT
pk_uid,
nome,
max_lg,
max_ln
FROM
(
SELECT
a.pk_uid,
a.nome,
a.lg,
a.ln,
lg_max,
ln_max,
a.lg = lg_max AS max_lg,
a.ln = ln_max AS max_ln
FROM
dataset_test a
LEFT JOIN (
SELECT
NOME,
max(lg) AS lg_max,
max(ln) AS ln_max
FROM
dataset_test
GROUP BY
NOME
) USING (NOME)
) k
WHERE
max_lg | | max_ln != 0 | | 0
ORDER BY
nome dove:
ovvero: In QGIS e con le espressioni, il tutto sarebbe:
|
Ho un insieme di dati caratterizzati da un id univoco (
pk_uid
) e devo determinare il valore massimo, raggruppando secondo l'attributo (nome
), di due altri attributilg
eln
: come determinare l'ID (pk_uid) corrispondente ai valori massimi risultanti?qui un esempio del dataset:
La seguente query determina i valori massimi aggregati per
nome
degli attributilg
eln
che restituisce:
a me interessa capire come scrivere una query che restituisca questo:
dove:
id_lg_max
è l'id del valore massimo dell'attributolg
id_ln_max
è l'id del valore massimo dell'attributoln
Un modo sarebbe quello di utilizzare le espressioni dentro la funzione max, ecco un esempio:
otterrei la tabella sotto, che risulta confusionaria:
The text was updated successfully, but these errors were encountered: