繁体   English   中英

Mysql左加入,分组,计数和合并所有

[英]Mysql left join, group by, count and union all

这是我的查询

 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

在此先感谢您,希望有人可以帮助我。

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 ║
╚══════════════╩═══════════════╝
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

要么

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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