Query con MIN mySQL (?)

di il
6 risposte

Query con MIN mySQL (?)

Ciao, ho scritto la seguente query per ottenere la colonna giornalista.id e la colonna col numero di articolo che ciascuno ha scritto:

SELECT giornalista.id, count(*) AS numart 

FROM articolo, giornalista WHERE giornalista.id=articolo.giornalista

 GROUP BY giornalista.id

 HAVING COUNT(*)<=(SELECT COUNT(*) FROM articolo WHERE giornalista.id=articolo.giornalista giornali GROUP BY giornalista.id);

tuttavia mi necessita avere l'id del giornalista che ha scritto il minor numero di articoli, qualcuno ha la soluzione ?
Grazie, Antonio

6 Risposte

  • Re: Query con MIN mySQL (?)

    Scusa, una precisazione: hai postato in SQL Server e nel titolo hai scritto mySQL. C'è stato qualche errore di digitazione? Con quale db stai lavorando? (magari la risposta è identica però per la precisione… )

  • Re: Query con MIN mySQL (?)

    05/01/2024 - Philcattivocarattere ha scritto:


    Scusa, una precisazione: hai postato in SQL Server e nel titolo hai scritto mySQL. C'è stato qualche errore di digitazione? Con quale db stai lavorando? (magari la risposta è identica però per la precisione… )

    Scusami ho commesso un errore, intendo su MySQL Workbench; sono nuovo e sto ancora cercando di capire come funziona il forum :)

  • Re: Query con MIN mySQL (?)

    Salve,

    non ho affatto compreso 

    HAVING COUNT(*)<=(SELECT COUNT(*) FROM articolo WHERE giornalista.id=articolo.giornalista giornali GROUP BY giornalista.id);

    questo in effetti NON filtra niente, e tra l'altro, in SQL Server (ma direi su ogni dbms) non compila neanche vista la “parola” [giornali] esterna al contesto ed alla sintassi stessa, restituendo

    Msg 102, Level 15, State 1, Line 6
    Incorrect syntax near 'giornali'.

    usando Northwind e le tabelle Customers e Orders, probabilmente scriverei

    WITH cteGrouped AS (
        SELECT c.CustomerID, COUNT(*) numart
            FROM dbo.customers c
                JOIN dbo.orders o ON c.CustomerID = o.CustomerID
            GROUP BY c.CustomerID
        )
        SELECT c.CustomerID, c.numart
            FROM cteGrouped c
            WHERE c.numart = (SELECT MIN(numart) FROM cteGrouped);

    sto pensando a windowing functions ma non mi viene in mente niente di “intelligente”… vabbe', stomaco pieno dopo pranzo, il sangue non sale bene :D

    ho capito male??

    salutoni romagnoli
    – 
    Andrea

  • Re: Query con MIN mySQL (?)

    05/01/2024 - roastedDD ha scritto:

    commesso un errore, intendo su MySQL Workbench

    Nella pagina principale del forum c'è il raggruppamento Databases & Office Automation dove ci sono le varie sezioni specifiche, questa ad esempio è per MySQL e MariaDB. Che poi chi legge sappia rispondere da un parte o dall'altra è dovuto al fatto che conosce entrambi i sistemi, però ognuno ha le sue peculiarità ed è più facile dare le soluzioni mirate.

    Se succede ancora che ti sbagli “segnala” il tuo stesso thread con il pulsante “Funzioni” che c'è nell'angolo in basso a destra e scrivi nella finestra che compare di spostare il thread. Il messaggio viene visualizzato da Toki o chi per lui e lo spostano.

  • Re: Query con MIN mySQL (?)

    Spostato nell' area corretta!

  • Re: Query con MIN mySQL (?)

    05/01/2024 - roastedDD ha scritto:


    Ciao, ho scritto la seguente query per ottenere la colonna giornalista.id e la colonna col numero di articolo che ciascuno ha scritto:

    SELECT giornalista.id, count(*) AS numart 

    FROM articolo, giornalista WHERE giornalista.id=articolo.giornalista

     GROUP BY giornalista.id

     HAVING COUNT(*)<=(SELECT COUNT(*) FROM articolo WHERE giornalista.id=articolo.giornalista giornali GROUP BY giornalista.id);

    tuttavia mi necessita avere l'id del giornalista che ha scritto il minor numero di articoli, qualcuno ha la soluzione ?
    Grazie, Antonio

    Ma al momento questa select funziona?

    Potresti spiegarmi la query che hai scritto?

    Quali sono le tabelle e i relativi campi?

    Con dati di esempio, cosa vorresti ottenere?

    Vuoi il minor numero di articoli? Il count è un indizio… ordinandolo per crescente è il primo record, decrescente è l'ultimo…

    In base al minore (o i minori) filtri where count = risultato…

    Meglio una stored procedure…

Devi accedere o registrarti per scrivere nel forum
6 risposte