简体   繁体   中英

adding INNER JOIN to convert ID to a value from another table

i have an SQL Script which generates the following Output:

+------------+------------+--------------------+----------------------+---------------------+
| CUSTOMERID | TOTALCOUNT | VALIDWARRANTYCOUNT | EXPIREDWARRANTYCOUNT | LASTPURCHASED       |
+------------+------------+--------------------+----------------------+---------------------+
| 1          | 5          | 5                  | 0                    | 2013-12-24 14:37:45 |
| 2          | 3          | 3                  | 0                    | 2013-12-24 14:37:45 |
| 3          | 6          | 6                  | 0                    | 2013-10-23 13:37:45 |
+------------+------------+--------------------+----------------------+---------------------+

I would like to see the Companyname of the Customer in a additional column. I have an extra table with customer id and company name but I don't know how to extend my query. All trys result in an empty table.

Here is my Query:

SELECT  p2c.customerid
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS TotalCount
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) >= CURDATE()
        ) AS ValidWarrantyCount
    ,   (    
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) < CURDATE()
        ) AS ExpiredWarrantyCount
    ,   (
            SELECT MAX( from_unixtime(purchased) )
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS LastPurchased
FROM    (
            SELECT DISTINCT
                p2c.customerid
            FROM
                products2customers p2c
            INNER JOIN
                products p
            ON
                p2c.customerid = p.id
        ) AS p2c

I made an SQL Fiddle with the normal query without a join, I hope someone could give me a hint.

SQLFiddle

Just add your JOIN in the very last line, and select the company after the customer id:

SELECT  p2c.customerid,
        c.company
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS TotalCount
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) >= CURDATE()
        ) AS ValidWarrantyCount
    ,   (    
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) < CURDATE()
        ) AS ExpiredWarrantyCount
    ,   (
            SELECT MAX( from_unixtime(purchased) )
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS LastPurchased
FROM    (
            SELECT DISTINCT
                p2c.customerid
            FROM
                products2customers p2c
        ) AS p2c
JOIN customers c ON c.id = p2c.customerid; <--

Updated fiddle: http://sqlfiddle.com/#!2/60396/5/0

just add another join to the customer table as below

SELECT  p2c.customerid, company
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS TotalCount
    ,   (
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) >= CURDATE()
        ) AS ValidWarrantyCount
    ,   (    
            SELECT COUNT(*)
            FROM   products2customers
            WHERE  customerid = p2c.customerid
               AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) < CURDATE()
        ) AS ExpiredWarrantyCount
    ,   (
            SELECT MAX( from_unixtime(purchased) )
            FROM   products2customers
            WHERE  customerid = p2c.customerid
        ) AS LastPurchased
FROM    (
            SELECT 
                p2c.customerid, c.company
            FROM
                products2customers p2c
            INNER JOIN
                products p
            ON
                p2c.customerid = p.id

inner join customers c 
on c.id=p2c.customerid group by 1,2
        ) AS p2c

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM