Mysql 解决了CONCAT楼层报表的使用问题

Mysql 解决了CONCAT楼层报表的使用问题,mysql,Mysql,我需要创建一个频率表,显示每个箱子的收入。这个箱子的范围是500。下面显示的代码几乎完成了工作,只是显示了不同的值: SELECT IF(rng='1 - 500','0 - 500',rng)AS Revenue, IFNULL(B.rngcount,0)AS Count FROM ( SELECT '1 - 500' rng UNION SELECT '501 - 1000' UNION SELECT '1001 - 1500' UNIO

我需要创建一个频率表,显示每个箱子的收入。这个箱子的范围是500。下面显示的代码几乎完成了工作,只是显示了不同的值:

SELECT IF(rng='1 - 500','0 - 500',rng)AS Revenue,
       IFNULL(B.rngcount,0)AS Count 
FROM
    (
    SELECT '1 - 500' rng UNION
    SELECT '501 - 1000'   UNION
    SELECT '1001 - 1500'  UNION
    SELECT '1501 - 2000'  UNION
    SELECT '2001 - 2500'
   ) A 
LEFT JOIN (SELECT CONCAT(FLOOR((product.price * line_item.quantity)/500)*500+1,' - ',FLOOR((product.price * line_item.quantity)/500)*500+500) rng, 
                  COUNT(1) rngcount 
           FROM  line_item, product 
           GROUP BY rng) B USING (rng);
选择CONCAT(ranges.lo,'-',ranges.hi)收入,
计数(*)`计数`
来自第_行项目
使用(产品标识)加入产品
连接(选择1个lo,500个hi接头
选择5011000个联合体
选择1001500union
选择1501200union
在product.price*line_item.quantity上选择ranges.lo和ranges.hi之间的2001、2500)范围
按ranges.lo、ranges.hi分组;


正如我所评论的-必须指定
产品
行项目
之间的关系。它们的公共列是
产品\u id
-因此根据添加的连接条件

范围表以从到的形式使用,这简化了检查revenie所在的范围


是否可以对“计数”列求和,然后将总数放在一起

很容易

选择CONCAT(ranges.lo,'-',ranges.hi)收入,
计数(*)`计数`
来自第_行项目
使用(产品标识)加入产品
连接(选择1个lo,500个hi接头
选择5011000个联合体
选择1001500union
选择1501200union
在product.price*line_item.quantity上选择ranges.lo和ranges.hi之间的2001、2500)范围
按收入分组并汇总;

“总计”行是最后一行,收入列中的值为空。

这是我用来按周对收入进行分组的代码。也许您仍然可以简化此操作

    (sales_agent.name)AS Agent, 
    (sales_team.name)AS Team, 
    
    SUM(IF((WEEK(order_.date) - WEEK(DATE_SUB(order_.date, INTERVAL DAYOFMONTH(order_.date)-1 DAY)) + 1=1), product.price * line_item.quantity,0)) AS Week_1, 
    SUM(IF((WEEK(order_.date) - WEEK(DATE_SUB(order_.date, INTERVAL DAYOFMONTH(order_.date)-1 DAY)) + 1=2), product.price * line_item.quantity,0)) AS Week_2, 
    SUM(IF((WEEK(order_.date) - WEEK(DATE_SUB(order_.date, INTERVAL DAYOFMONTH(order_.date)-1 DAY)) + 1=3), product.price * line_item.quantity,0)) AS Week_3,
    SUM(IF((WEEK(order_.date) - WEEK(DATE_SUB(order_.date, INTERVAL DAYOFMONTH(order_.date)-1 DAY)) + 1=4), product.price * line_item.quantity,0)) AS Week_4,
    SUM(IF((WEEK(order_.date) - WEEK(DATE_SUB(order_.date, INTERVAL DAYOFMONTH(order_.date)-1 DAY)) + 1=5), product.price * line_item.quantity,0)) AS Week_5,
    SUM(product.price * line_item.quantity) AS Total
FROM ((((line_item
INNER JOIN order_ ON line_item.order_id = order_.order_id)
INNER JOIN sales_agent ON order_.agent_id = sales_agent.agent_id)
INNER JOIN sales_team ON sales_agent.team_id  = sales_team.team_id)
INNER JOIN product ON line_item.product_id = product.product_id)
GROUP BY sales_agent.agent_id;

您真的需要交叉连接
行项目
产品
表吗?看起来WHERE子句丢失了…为这两个表提供CREATETABLE,一些示例数据作为INSERT INTO和此数据的所需输出。还要指定精确的MySQL版本。我使用join,因为数据来自两个表。产品和行项目。你能帮助我如何使它工作吗?我使用join,因为数据来自两个表。您使用的产品和行项目不是联接(A中的每一行到B中的每一相关行),而是交叉联接(A中的每一行到B中的每一行,即使它们彼此不相关)。如何让它工作?提供上面提到的所有内容。好的,让我试着编辑我的帖子。这是你做的一个惊人的代码。你救了我一天。你是伟大的阿基纳。接下来的问题是阿基纳爵士,是否可以将计数列求和,并将总数放在一起。请出示解决方案。@Kristofermorada更新。太好了。也可以将结果交叉列表。假设我想在收入和计数之间的列中显示产品(苏打水、白酒、柠檬、芒果、吸入器)。这些数据将在各自的范围内,其总数将低于?@Kristofermorada这被称为枢轴。MySQL不支持它。当然,您可以模拟它(通过静态产品列表的条件聚合,或通过动态产品列表的动态SQL存储过程),但我建议使用其报告服务在客户端执行此操作,该服务必须支持透视表。