Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    2

    [SQL] join su piu' tabelle con count e distinct

    Salve a tutti, intanto un saluto a tutti e grazie per il vostro aiuto... Questo e' il mio primo post e spero di non fare errori.
    Sto cercando di fare un po di pratica con sql ed ho trovato degli esercizi online ma non riesco a capire dove sbaglio. Per fare pratica sto usando il sito della W3Schools, c'e' un db con delle tabelle ed un editor: http://www.w3schools.com/sql/trysql....sql_select_all

    ho le seguenti tabelle:
    Customers (customerid, customername)
    Orders (orderid, customerid)
    Orderdetails (orderdetailsid, orderid, productid)

    Sto cercando di calcolare quanti differenti prodotti ha acquistato ogni cliente, il mio output dovrebbe quindi essere: customerid, customername, item acquistati

    sto provando a fare delle join ma il risutato e' sbagliato, non so se devo strutturare la query in modo diverso o solo il distinct, infatti per ora il risultato migliore che sono riuscito a raggiungere e' una conta di tutti gli item comprati da ogni cliente in tutti gli ordini:

    codice:
    select q.orderid, q.customerid, count( d.productid) as 'Totale Items'
    from orderdetails d
    inner join 
        (select o.orderid, c.customerid
        from orders o 
        inner join customers c 
        on o.customerid = c.customerid) q
    on d.orderid = q.orderid
    group by q.orderid, q.customerid

    ho provato ad inserire un distinct nel count:
    codice:
    select q.orderid, q.customerid, count( distinct d.productid) as 'Totale Items'
    mi da errore:
    Syntax error (missing operator) in query expression 'count( distinct d.productid)'.

    pensavo che con un distinct avrei risolto ma mi sa che mi sono perso qualcosa per strada

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Una vista raggruppata (V1) dove estrai il Cliente e i Prodotti

    poi raggruppi ancora la V1 contando i Prodotti

    codice:
    SELECT 
    V1.CustomerID, 
    V1.CustomerName, 
    Count(V1.ProductID) AS TotItem 
    FROM 
        (
        SELECT 
        C.CustomerID, 
        C.CustomerName, 
        D.ProductID 
        FROM 
        (
        Customers AS C 
        LEFT JOIN 
        Orders AS O 
        ON 
        C.CustomerID = O.CustomerID
        ) 
        LEFT JOIN 
        OrderDetails AS D 
        ON 
        O.OrderID = D.OrderID 
        GROUP BY 
        C.CustomerID, 
        C.CustomerName, 
        D.ProductID
        ) AS V1 
    GROUP BY 
    V1.CustomerID, 
    V1.CustomerName
    ;
    facci sapere
    Ultima modifica di nman; 08-01-2017 a 09:49

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    2
    Grazie mille la tua query e' proprio quello che stavo cercando...

    Un'altra domanda, sono riuscito ad adattare la mia query al problema usando il distinct:
    codice:
    select v1.customerid, v1.customername, count(distinct v1.productid)from
    (select q.customerid, q.customername, d.productid 
    from orderdetails d
    inner join 
        (select o.orderid, c.customerid, c.customername
        from orders o 
        inner join customers c 
        on o.customerid = c.customerid) q
    on d.orderid = q.orderid) as v1
    group by v1.customerid, v1.customername

    Ora questa funziona solo che non ho capito come mai nella tua query ci sono anche i codici dei clienti con zero items, mentre nella mia no...

    Cmq grazie

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da corky81 Visualizza il messaggio
    ........ nella tua query ci sono anche i codici dei clienti con zero items, mentre nella mia no ........
    - Inner Join
    - Left Join
    - Right Join
    Visualizzano rispettivamente
    - Tutti (solamente) i record corrispondenti
    - Tutti i record di Sinistra (quindi ai destri mancanti la somma risulta zero)
    - Tutti i record di Destra (quindi ai sinistri mancanti la somma risulta zero)

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.