【问题标题】:How to query and sum data with the same name, but still get the name如何查询和求和具有相同名称的数据,但仍然获取名称
【发布时间】:2019-10-12 15:15:29
【问题描述】:

我有表'sales_revenue',它看起来像这样:

product_name     |   revenue   | 
  pen            |      20     |   
  pen            |      40     |   
  bottle         |      50     |  
  bottle         |      50     |  
  green pen      |      20     |   

我在 codeigniter 中的查询是这样的:

$data['row'] = $this->db->group_by('product_name')- 
>order_by('revenue','DESC')->select_sum('revenue')- 
>get('sales_revenue')->result();

它只产生收入的总和,但我的目标是获得每个产品的总收入以及产品名称。任何建议如何做到这一点?

【问题讨论】:

  • 您希望的输出是否具有包含每项收入的字段(列)? (即revenue * Quantity),或者返回一个记录与收入列的总和? (即... green pen | 20 | 1; total | 180 | -),或者返回一个记录与收入列的sumproduct? (即... green pen | 20 | 1; total | 220 | -
  • 我已经编辑了表格,我的查询目标是返回每个产品的总收入以及产品的名称。我使用结果创建条形图,使用产品名称作为类别或 x 轴,总收入作为 y 轴
  • 如果你找到了自己的答案,请不要在问题中添加它,而是写一个正确的答案(你需要+15声望,你有)。您甚至可以接受自己的答案,请在此处阅读:stackoverflow.com/help/self-answer
  • 好吧,我不知道。我已经编辑了我的问题

标签: php mysql codeigniter


【解决方案1】:

我没有测试它,但我认为你可以做以下

$data['row'] = $this->db->group_by('product_name')
    ->order_by('revenue','DESC')
    ->select('SUM(revenue), product_name')
    ->get('sales_revenue')->result();

或者简单地说:

$data['row'] = $this->db->query('SELECT SUM(revenue), product_name FROM sales_revenue GROUP BY product_name ORDER BY revenue DESC')

希望对你有帮助

【讨论】:

  • 感谢您的回复,我已经实际尝试过了,它总是返回这样的消息:ORDER BY 子句的表达式#1 不在 GROUP BY 子句中,并且包含非聚合列 'datamart_kf.sales_revenue。收入',它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
【解决方案2】:

简单使用

$data['row'] = $this->db->query('SELECT product_name,SUM(revenue) AS revenue FROM sales_revenue GROUP BY product_name ORDER BY product_name DESC')

如果要按收入排序,请使用

ORDER BY SUM(revenue) ASC

【讨论】:

  • 感谢您的回复,但最终我得到了正确的查询:$data['row'] = $this->db->group_by('product_name')->order_by('revenue' ,'DESC')->select_sum('revenue')->select('product_name')->get('sales_revenue')->result();
【解决方案3】:

我不知道 codeigniter,但在标准 SQL 中,您可以使用别名来完成。

SELECT product_name, revenue, (SELECT sum(revenue) FROM sales_revenue) as total_revenue FROM sales_revenue GROUP BY product_name ORDER BY revenue DESC;

【讨论】:

    【解决方案4】:

    我自己找到了这个问题的答案:

     $data['row'] = $this->db ->group_by('product_name')
                              ->order_by('revenue','DESC')
                              ->select_sum('revenue')
                              ->select('product_name')
                              ->get('sales_revenue')
                              ->result();
    

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2014-07-25
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多