Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [SQL] Query per conteggio elementi

    Ciao,
    ho una tabella che contiene 4 campi che chiameremo campo_1, campo_2, campo_3, campo_4.
    In diverse righe della tabella, ma anche all'interno della stessa riga, i campi possono essere uguali tra di loro anche incrociandosi.
    Per esempio su due righe differenti il campo_1 di una riga potrebbe essere uguale al campo_3 di un'altra riga e questo campo_3 potrebbe essere uguale al campo_4 di un'altra ancora.
    Spero di essere spiegato fino ad ora.
    Quello che devo riuscire a realizzare è una query che mi estragga e mi conti le occorrenze di ogni singolo valore che può essere presente all'interno di questa tabella in uno dei 4 campi sopracitati.
    http://www.beavermag.it

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    prova così

    codice:
    select valore,sum(quanti) as volte from 
    (select campo1 as valore,count(campo1) as quanti from tabella group by campo1
    union all
    select campo2 as valore,count(campo2) as quanti from tabella group by campo2
    union all
    select campo3 as valore,count(campo3) as quanti from tabella group by campo3
    union all
    select campo4 as valore,count(campo4) as quanti from tabella group by campo4
    ) as tab group by valore

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Basta una select unica
    codice:
    select sum(if(campo1=valore,1,0)+if(campo2=valore,1,0)+if(campo3=valore,1,0)+if(campo4=valore,1,0)) as totale from tabella
    @biamat: un'esigenza di questo tipo è sintomo di database progettato male. Per quella relazione ci voleva una tabella apposita.

  4. #4
    Ciao,
    ottima osservazione infatti credo ricorrerò alla riprogettazione del DB.
    Pensavo di procedere in questo modo.
    La tabella principale rimarrà uguale a prima con la sola eliminazione dei 4 campi.
    Creerò una seconda tabella composta da dua soli campi: il primo farà riferimento all'ID di un elemento della prima tabella mentre il secondo conterrà il valore di uno dei 4 campi di prima quindi diciamo che per ogni entri nella prima tabella ce ne saranno 4 nella seconda.
    A questo punto per fare quello che voglio mi basterà fare una query di questo tipo:

    SELECT campo, COUNT(campo) AS occorrenze FROM tabella2 GROUP BY campo ORDER BY occorrenze DESC;

    Grazie mille, non avevo proprio pensato alla ristrutturazione del database...eheheh
    http://www.beavermag.it

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da luca200
    Basta una select unica
    codice:
    select sum(if(campo1=valore,1,0)+if(campo2=valore,1,0)+if(campo3=valore,1,0)+if(campo4=valore,1,0)) as totale from tabella
    Ciao Luca.
    Ma così trova le occorrenze solo di un valore specifico, non tutte.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.