php - 如何在 GROUP_CONCAT() 中获取 SUM()

标签 php mysql

我正在尝试获取所有大小,并将结果作为 GROUP_CONCAT() 内的一个。

  • 如果GROUP_CONCAT()内部有相同的结果,我们可以使用SUM()
  • 如果 NULLproduct_size.Size_Name 的其他大小,则不会获得该值的 SUM()

顺便说一句,这是我的查询:

            SELECT
              product_table.Product_Name,
              SUM(product_quantity.Quantity) AS 'QUANTITY',
              GROUP_CONCAT(
                product_quantity.Quantity,
                ' box/es ',
                product_size.Size_Name,
                ' size' SEPARATOR '\n'
              ) AS 'SIZE'
            FROM
              product_quantity
            RIGHT JOIN
              product_table
            ON
              product_quantity.Product_ID = product_table.Product_ID
            LEFT JOIN
              product_size
            ON
              product_quantity.Size_ID = product_size.size_ID
            GROUP BY
              product_table.Product_Name ASC

这就是结果:

  PRODUCT                 QUANTITY                       SIZE

Hawaiian Pizza                 11                   2 - box/es Large size
                                                    3 - box/es Large size
                                                    1 - box/es Small size
                                                    5 - box/es Large size

这是我现在想要得到的正确答案:

  PRODUCT                    QUANTITY                       SIZE

Hawaiian Pizza                 11                   10 - box/es Large size
                                                    1 - box/es Small size

但是怎么办呢?有什么想法吗???

顺便说一句,这是我的表结构:

对于,

表格产品:

        CREATE TABLE `product_table` (
          `Product_ID` int(40) NOT NULL,
          `Product_Name` varchar(400) NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


        INSERT INTO `product_table` (`Product_ID`, `Product_Name`) VALUES
        (1001, 'Hawaiian Pizza'),
        (1002, 'Chicken Alfredo'),
        (1003, 'Chicken Quesadillas'),
        (1004, 'Mexican Pizza'),
        (1006, 'Beef Pepperoni Pizza');

      ALTER TABLE `product_table`
      ADD PRIMARY KEY (`Product_ID`),
      ADD KEY `Product_ID` (`Product_ID`);

      ALTER TABLE `product_table`
       MODIFY `Product_ID` int(40) NOT NULL AUTO_INCREMENT,     
       AUTO_INCREMENT=1007;

表产品大小:

        CREATE TABLE `product_size` (
          `Size_ID` int(100) NOT NULL,
          `Size_Name` varchar(50) NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

        INSERT INTO `product_size` (`Size_ID`, `Size_Name`) VALUES
         (1, 'Small'),
         (2, 'Medium'),
         (3, 'Extra Large'),
         (4, 'Large');

       ALTER TABLE `product_size`
       ADD PRIMARY KEY (`Size_ID`);

       ALTER TABLE `product_size`
       MODIFY `Size_ID` int(100) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

表产品数量:

       CREATE TABLE `product_quantity` (
          `Quantity_ID` int(100) NOT NULL,
          `Quantity` int(100) NOT NULL,
          `Product_ID` int(100) NOT NULL,
          `Size_ID` int(100) NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

        INSERT INTO `product_quantity` (`Quantity_ID`, `Quantity`, 
       `Product_ID`, `Size_ID`) VALUES
        (18, 2, 1002, 3),
        (19, 1, 1001, 2),
        (20, 2, 1003, 1),
        (21, 3, 1002, 2),
        (22, 1, 1002, 3),
        (23, 2, 1003, 3),
        (24, 3, 1004, 4),
        (25, 1, 1003, 3),
        (26, 3, 1006, 3),
        (27, 4, 1002, 3),
        (28, 2, 1004, 4),
        (29, 4, 1002, 3),
        (30, 2, 1002, 3),
        (31, 2, 1002, 2),
        (32, 3, 1003, 3),
        (33, 23, 1002, 4);

        ALTER TABLE `product_quantity`
        ADD PRIMARY KEY (`Quantity_ID`),
        ADD KEY `Product_ID` (`Product_ID`),
        ADD KEY `Size_ID` (`Size_ID`);

        ALTER TABLE `product_quantity`
        MODIFY `Quantity_ID` int(100) NOT NULL AUTO_INCREMENT, 
        AUTO_INCREMENT=34;

          ALTER TABLE `product_quantity`
          ADD CONSTRAINT `product_quantity_ibfk_1` FOREIGN KEY    
          (`Product_ID`) REFERENCES `product_table` (`Product_ID`) 
          ON DELETE CASCADE ON UPDATE CASCADE,
          ADD CONSTRAINT `product_quantity_ibfk_2` FOREIGN KEY (`Size_ID`) 
          REFERENCES `product_size` (`Size_ID`) ON DELETE CASCADE ON
          UPDATE CASCADE;

最佳答案

我认为您不需要group_concat。普通的group by应该可以做到。

SELECT product_table.product_name,
       Sum(product_quantity.quantity),
       CONCAT(' box/es ',
              product_size.size_name, 
              ' size') AS 'SIZE' 
FROM   product_quantity 
RIGHT JOIN product_table 
        ON product_quantity.product_id = product_table.product_id 
LEFT JOIN  product_size 
       ON  product_quantity.size_id = product_size.size_id 
GROUP  BY  product_table.product_name ASC,
           product_size.size_name

提供源数据和更精确的数据输出,我可以创建一个示例演示。

关于php - 如何在 GROUP_CONCAT() 中获取 SUM(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407992/

相关文章:

mysql - 来自 phtml 的 Magento sql 查询

php - 如何调用validation.php中编写的函数并将所有函数名称存储在数据库中

PHP - XHTML 表单上的分页列表

javascript - 页面刷新后如何保留我的输入

php - Wordpress/Woocommerce 如何自定义 wc_display_item_meta

mysql - 授予 MySQL 访问权限的命令

mysql - 如何在 MySQL 数据库中搜索特定列名?

php - 如何自动选择编辑表单中的值?

php - 在 Zend Framework 中强制 HTTP 到 HTTPS 重定向

mysql - 如何在mysql中按两列对表进行条件排序?