mysql - 如何动态选择列并在mysql中汇总所有大小

标签 mysql

我在使列动态化时遇到了一个问题,并且想要计算数量。我正在静态获取所有尺寸,但我想使其动态化。首先,我将分享我的代码:-

SELECT order_products.product_name,
max(CASE 
WHEN 
order_product_sizes.size = 'S' THEN  order_product_sizes.qty    
END) AS S,
max(CASE 
WHEN 
order_product_sizes.size = 'M' THEN  order_product_sizes.qty    
END) AS M,
max(CASE 
WHEN 
order_product_sizes.size = 'XL' THEN  order_product_sizes.qty    
END) AS XL,
max(CASE 
WHEN 
order_product_sizes.size = '2XL' THEN  order_product_sizes.qty    
END) AS '2XL',
max(CASE 
WHEN 
order_product_sizes.size = '3XL' THEN  order_product_sizes.qty    
END) AS '3XL',
max(CASE 
WHEN 
order_product_sizes.size = '4XL' THEN  order_product_sizes.qty    
END) AS '4XL',
from order_products join order_product_sizes
on order_product_sizes.order_product_id = order_products.id
group by order_product_sizes.order_product_id

enter image description here

我还想要总计列中所有尺寸的总和。提前致谢

最佳答案

您可以尝试以下 -

SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(IF(size = ''',
          size,
          ''', qty, NULL)) AS ',
          size
        )
      ) INTO @sql
    FROM order_products_sizes;

    SET @sql = CONCAT('SELECT order_products.product_name, ', @sql, ' ,sum(qty) as total
                       FROM order_products join order_products_sizes
    on order_products_sizes.order_product_id = order_products.id
    group by order_products_sizes.order_product_id');

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

关于mysql - 如何动态选择列并在mysql中汇总所有大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53911756/

相关文章:

javascript - 使用nodejs更新mysql表

mysql - 'a1.location' 中的未知列 'where clause'

mysql - 具有全文搜索功能的海量数据库 - Sphinx、Lucene、Cassandra、MongoDB、CouchDB

mysql - 3 个表和 2 个左连接

mysql - 帮助 MySql 查询 - 包含特定列的分组最大值的行

php - 使用 MySQL 结果更改 UITextField(xcode 项目)

php 安全和使用 html 链接 (GET) 标记要删除的 mysql 记录

javascript - 在 Firebase 数据库中推送新值之前,如何检查是否存在相同的数据?

mysql - 在mysql中按范围分组

mysql - 在 MySQL 中创建计划事件