简体   繁体   中英

Mysql left join, group by, count and union all

Heres my query

 SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)."
 UNION ALL
 SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing_undelivered
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)."

fsi_courier_assignment_print_master_listing table

  master_listing_id   dispatch_code_id
          2                 2
          5                 2
          36                2
          37                2
          134               2
          135               2
          136               2
          137               2
          138               2
          139               2
          140               2

fsi_courier_assignment_print_master_listing_undelivered table

  master_listing_id   dispatch_code_id
          1                 2

fsi_master_listing table

  master_listing_id   transmittal_id
          1                 1
          2                 1
          5                 2
          36                2
          37                2
          134               3
          135               3
          136               3
          137               3
          138               3
          139               3
          140               3

fsi_transmittals table

  transmittal_id   product_name
        1             Name 1
        2             Name 2
        3             Name 3

What Im trying to do is to get the combined result of product from fsi_courier_assignment_print_master_listing and fsi_courier_assignment_print_master_listing_undelivered where dispatch_code_id='2' and count them

My desire Output would be

  Product Name    Product Count
     Name 1            2
     Name 2            3
     Name 3            7

Thanks in advance, hope somebody can help me to this..

SELECT product_name, COUNT(*) AS Product_Count
FROM
(SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name
 FROM fsi_courier_assignment_print_master_listing
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=2
 UNION ALL
 SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name
 FROM fsi_courier_assignment_print_master_listing_undelivered
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=2
 ) AS sub
 GROUP BY product_name;

LiveDemo

Output:

╔══════════════╦═══════════════╗
║ product_name ║ Product_Count ║
╠══════════════╬═══════════════╣
║ Name 1       ║             2 ║
║ Name 2       ║             3 ║
║ Name 3       ║             7 ║
╚══════════════╩═══════════════╝
SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)."
 GROUP BY fsi_transmittals.transmittal_id
 UNION ALL
 SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing_undelivered
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)."
 GROUP BY fsi_transmittals.product_name

OR

SELECT fsi_transmittals.product_name, SUM(fsi_transmittals.transmittal_id) AS transmittal_id 
FROM ( SELECT 
    fsi_courier_assignment_print_master_listing.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)."
 GROUP BY fsi_transmittals.transmittal_id
 UNION ALL
 SELECT 
    fsi_courier_assignment_print_master_listing_undelivered.master_listing_id,
    fsi_master_listing.transmittal_id,
    fsi_transmittals.product_name,
    fsi_transmittals.transmittal_id
 FROM fsi_courier_assignment_print_master_listing_undelivered
 LEFT JOIN fsi_master_listing ON fsi_courier_assignment_print_master_listing_undelivered.master_listing_id = fsi_master_listing.master_listing_id
 LEFT JOIN fsi_transmittals ON fsi_master_listing.transmittal_id = fsi_transmittals.transmittal_id
 WHERE dispatch_code_id=".$this->db->escape($dispatch_code_id)." )
GROUP BY fsi_transmittals.product_name

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