Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    17

    [sql] consiglio su query

    Ciao a tutti, ho bisogno di una query all'apparenza semplice ma che in realtà non riesco a mettere in pratica, mi spiego meglio con un esempio.
    Ho una tabella di questo tipo:
    codice:
    +-------------------------------+------------------------------+
    | dataXXX                       | dataYYY                      |
    +-------------------------------+------------------------------+
    | bt03_ttH120_8j                | bt_2x1033PU761_TkMu_g133_CMS |
    | bt03_ttH120_8j                | bt_2x1033PU761_TkMu_g133_CMS |
    | bt03_ttH120_8j                | bt_DST033PU761_TkMu_g133_CMS |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_NoPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_AAPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_AAPU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_DSTU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_DSTU8713_TkMu_2_g133_OSC  |
    | mu05_cosmic_surface_bfield_on | mu_DSTU8713_TkMu_2_g133_OSC  |
    +-------------------------------+------------------------------+
    dovrei fare una query che mi restituisca un COUNT di ogni dataXXX sia con dataYYY contente il termine DST che dataXXX sia con dataYYY non contente il termine DST.

    nel caso precedente quindi un risultato tipo:
    codice:
    +-----+-----------------+--------+
    | num | dataXXX         | dataZZZ|
    +-----+-----------------+--------+
    |   1 | bt03_ttH120_8j  | DST    |
    |   2 | bt03_ttH120_8j  | noDST  |
    |   3 | bt03_ttH120_8j  | DST    |
    |  14 | bt03_ttH120_8j  | noDST  |
    +-----+-----------------+--------+
    è plausibile pensare di poterlo fare in una sola query?
    se si datemi qualche indizio, forme non conosco qualche costrutto che mi aiuti a realizzare la query.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    17
    mi rispondo da solo facendo un integrazione, ovviamente non posso usare una query tipo:
    codice:
    select count(*) as num, dataXXX, dataYYY from STATISTICA group by dataXXX,dataYYY;
    perchè dataYYY non è solo DST o non DST ma di non DST ce ne sono più di uno per ogni dataXXX e io voglio un count totale di quello non DST.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    17
    Mi RiRispondo nuovamente, una soluzione possibile un po' macchinosa:
    codice:
    select count(*) as num, dataXXX, LEFT(BIN(INSTR(dataYYY,'DST')),1) as ow from STATISTICA group by dataXXX,ow;
    In pratica mi prendo la posizione della prima occorrenza di DST nella stringa dataYYY, converto il numero in binario cosicchè la prima cifra a sinistra è sempre 1 e trono alla prima cifra a sinistra ed ottengo quello che volevo, non chiarissima la query ma funziona.
    Consigli per migliorare sono cmq ben accetti

  4. #4
    Una soluzione semplice ed immediata stà nell' usare query annidate e costrutti come IN o NOT IN (consulta un buon manuale SQL per saperne di più).
    Tuttavia il mysql 4, almeno con il myIsam, non supporta le query annidate.
    Non sò con il mysql5.
    Ciao.
    Stefano Viscione,
    miosito.ilbello.com
    www.lucemsoft.it/

  5. #5
    nel tuo primo post hai messo come dataXXX sempre bt03_ttH120_8j è un errore o vuoi proprio così? perché a legger la richiesta non sembra che tu voglia quello che illustri nella figura...


    puoi postare un piccolo dump delle tabella interessata? si dovrebbe poter fare anche con mySQL 4 giocando con gli IF ELSE o similari





    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    con questa query ottieni quello che hai chiesto, solo formattato in maniera un pò diversa, ma hai tutti i dati che ti interessano:

    codice:
    select dataXXX,
    count( case when dataYYY like '%DST%' then 1 else null end ) AS dst,
    count( case when dataYYY not like '%DST%' then 1 else null end ) as no_dst
    from tbl
    group by dataXXX
    e questo è il risultato: (per ogni dataXXX hai il conteggio dei record di dataYYY che contengono DST e di quelli che non lo contengono)





    ciao!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    17
    Originariamente inviato da 13manuel84
    con questa query ottieni quello che hai chiesto, solo formattato in maniera un pò diversa, ma hai tutti i dati che ti interessano:

    codice:
    select dataXXX,
    count( case when dataYYY like '%DST%' then 1 else null end ) AS dst,
    count( case when dataYYY not like '%DST%' then 1 else null end ) as no_dst
    from tbl
    group by dataXXX
    e questo è il risultato: (per ogni dataXXX hai il conteggio dei record di dataYYY che contengono DST e di quelli che non lo contengono)


    ciao!
    Poi stamattina in treno ho avuto l'illuminazione ho usato sempre LIKE ma in questo modo:

    codice:
    SELECT count(dataXXX), dataXXX, dataYYY LIKE '%DST%' as dtY FROM `STATISTICA` group by dataXXX, dtY;
    ho quindi come risultato una colonna con il count di dataXXX, una con dataXXX e una con uno 0 o un 1 a seconda che sia DST o meno.
    grazie comunque per i suggerimenti...

  8. #8
    Originariamente inviato da higor
    Poi stamattina in treno ho avuto l'illuminazione ho usato sempre LIKE ma in questo modo:

    codice:
    SELECT count(dataXXX), dataXXX, dataYYY LIKE '%DST%' as dtY FROM `STATISTICA` group by dataXXX, dtY;
    ho quindi come risultato una colonna con il count di dataXXX, una con dataXXX e una con uno 0 o un 1 a seconda che sia DST o meno.
    grazie comunque per i suggerimenti...
    a te la scelta di che soluzione usare, come vedi ce ne sono diverse, danno lo stesso risultato ma sotto forme diverse, con la mia hai una query un po' più pesante ma lato php non devi fare niente, con la tua la query è leggermente più leggera (scusa il gioco di parole ) e ti devi poi processare i dati con php...

    io di solito preferisco avere tutto con l'sql se possibile, ma i gusti son gusti
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    17
    Originariamente inviato da 13manuel84
    a te la scelta di che soluzione usare, come vedi ce ne sono diverse, danno lo stesso risultato ma sotto forme diverse, con la mia hai una query un po' più pesante ma lato php non devi fare niente, con la tua la query è leggermente più leggera (scusa il gioco di parole ) e ti devi poi processare i dati con php...

    io di solito preferisco avere tutto con l'sql se possibile, ma i gusti son gusti
    più che altro uso la mia perchè poi devo ordinare in base al count (fregandomene che sia DST o meno) quindi mettendo un order dietro ho l'ordinamento pronto, poi in php vedo solo se aggiungere o meno il termine DST a dataXXX...

    Grazie.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.