Query per estrarre gli ID dei gruppi di tuple = 2

di il
5 risposte

Query per estrarre gli ID dei gruppi di tuple = 2

Salve.

Ho un problema con una query, che credo si possa risolvere (?) nidificando, ma non ho ben capito come.

Questo un esempio di dati della tabella messages:

mess_iduser_id
21
22
31
32
36
38
41
43
61
66
72
78

Quello che mi occorre è estrarre tutti i ragguppamenti secondo mess_id ilc ui conteggio è 2 (mi servono tutti i mess_id) dove è contnuto un determinato user_id.

Per esempio: considerando l user_id 2, la query mi dovrebbe restituire un array con i mess_id 2 e 7 (perché per il mess_id 3 tot = 3, mentre nei mess_id 4 e 6 lo user_id 2 non è contenuto).

Questa una query base:

SELECT COUNT(*) AS tot, mess_id
              FROM mesages
              GROUP BY mess_id

Mi restituisce tuttl i conteggi, e fin qui va bene. Ma, come faccio a discriminame i soli gruppi che contengono user_id = 2?

E a tenere solo i tot = 2?

Ho provato diverse varianti, ma le mie conoscenze di SQL sono limitate (e, forse, non è proprio una cosa semplice).

Qualcuno sa aiutarimi?

5 Risposte

  • Re: Query per estrarre gli ID dei gruppi di tuple = 2

    Scusa ma 

    08/03/2024 - BennyBatt ha scritt

    Select * from

                    (SELECT COUNT(*) AS tot, mess_id

                      FROM mesages un

                      GROUP BY mess_id )

    where tot=2

  • Re: Query per estrarre gli ID dei gruppi di tuple = 2

    Ecco, intanto grazie.

    Però, con questa query io estraggo tutti i gruppi di 2, però io cerco solo quelli in cui nelle tuple è contenuto un determinato user_id (come spiegato sopra), e non riesco a capire come indicarlo nella query di raggruppamento.

  • Re: Query per estrarre gli ID dei gruppi di tuple = 2

    Mah, ho la connessione altalenante. Avevo scritto altro + spiegazione..

    Aggiungi alla where queryB questo: and userid=2

  • Re: Query per estrarre gli ID dei gruppi di tuple = 2

    08/03/2024 - BennyBatt ha scritto:


    Ecco, intanto grazie.

    Però, con questa query io estraggo tutti i gruppi di 2, però io cerco solo quelli in cui nelle tuple è contenuto un determinato user_id (come spiegato sopra), e non riesco a capire come indicarlo nella query di raggruppamento.

    Una select restituisce una tabella…

    Se la tua sql è queryA allora fai una query alla query.

    Select * from queryA where tot=2 and userid=2

    Tra parentesi avevo scritto la tua query (quella che hai fatto tu).

  • Re: Query per estrarre gli ID dei gruppi di tuple = 2

    Bene, alla fine mi pare di avere risolto.

    Grazie dei suggermenti ma, almeno per le mie competenze, non è stato semplice.

    Questa la query che ho conseguito:

    SELECT * FROM
             (SELECT COUNT(*) AS tot, mess_id
              FROM messages
              GROUP BY mess_id) AS list
    WHERE list.tot = 2 AND mess_id IN
             (SELECT DISTINCT mess_id
              FROM messages
              WHERE user_id = :user_id)

    La necessità di nominare la subqueryA deriva da un errore, che ha un senso, naturalmente.

    Ho dovuto aggiungere una subquery per delimitare le mess_id che contengono lo user_id, perché la queryB non legge gli user_id.

    Farò un ulteriore controllo per vedere se non ci sono errori.

Devi accedere o registrarti per scrivere nel forum
5 risposte