Mysql离开了join,group by,count和union all

时间:2015-10-20 05:31:56

标签: mysql sql union

继承我的查询

 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

  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

  master_listing_id   dispatch_code_id
          1                 2

fsi_master_listing

  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

  transmittal_id   product_name
        1             Name 1
        2             Name 2
        3             Name 3

我尝试做的是获取fsi_courier_assignment_print_master_listingfsi_courier_assignment_print_master_listing_undelivered的产品组合结果,其中dispatch_code_id =' 2'并计算他们

我的愿望输出

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

先谢谢,希望有人可以帮我这个..

2 个答案:

答案 0 :(得分:0)

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

输出:

╔══════════════╦═══════════════╗
║ product_name ║ Product_Count ║
╠══════════════╬═══════════════╣
║ Name 1       ║             2 ║
║ Name 2       ║             3 ║
║ Name 3       ║             7 ║
╚══════════════╩═══════════════╝

答案 1 :(得分:0)

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