Mysql 使用汇总、排序依据和分组依据内部联接两个表

Mysql 使用汇总、排序依据和分组依据内部联接两个表,mysql,sql,database,codeigniter,Mysql,Sql,Database,Codeigniter,我最近几天一直被困在这里,真的不知道该怎么办我有一个包含三个表的数据库来获取数据。我无法使用包含内部联接和order by的rollup我有以下返回结果的查询 SELECT bb_catg.catg_name, bi_item_name, sum(bi_item_qty) as TotalQty, sum(bi_item_total) as Grandtotal FROM bb_bill_items inner join bb_item

我最近几天一直被困在这里,真的不知道该怎么办
我有一个包含三个表的数据库来获取数据。我无法使用包含内部联接和order by的rollup
我有以下返回结果的查询

SELECT  bb_catg.catg_name,
        bi_item_name,
        sum(bi_item_qty) as TotalQty,
        sum(bi_item_total) as Grandtotal
FROM bb_bill_items 
    inner join bb_items
    on  bb_bill_items.item_id = bb_items.item_id 
    inner join bb_catg 
    on bb_items.catg_id  = bb_catg.catg_id
    inner join bb_bill
    on bb_bill_items.bil_id  = bb_bill.bil_id
where dateandtime = '$date' and paymenttype = '$Status'
group by bb_bill_items.item_id
order by bb_catg.catg_name
结果

catg_name | bi_item_name | TotalQty | Grandtotal
------    | ------------ |--------- |-----------
PASTRIES  |Cupcake       |1         |270
PASTRIES  |Eclair        |1         |150
PASTRIES  |Mousse        |1         |350
           ----------
             total       |3         |770

任何帮助都将不胜感激。

您可以为您的解决方案更改以下查询:

SELECT  bb_catg.catg_name,bi_item_name,
        sum(bi_item_qty) as TotalQty,sum(bi_item_total) as Grandtotal
FROM bb_bill_items 
inner join bb_items
    on  bb_bill_items.item_id = bb_items.item_id 
inner join bb_catg 
on bb_items.catg_id  = bb_catg.catg_id
inner join bb_bill
    on bb_bill_items.bil_id  = bb_bill.bil_id
where dateandtime = '$date' and paymenttype = '$Status'
group by bb_catg.catg_name,bb_items.bi_item_name
order by bb_catg.catg_name

可以在GROUPBY子句中添加具有其他列的聚合函数。

您可以更改以下查询以获得解决方案:

SELECT  bb_catg.catg_name,bi_item_name,
        sum(bi_item_qty) as TotalQty,sum(bi_item_total) as Grandtotal
FROM bb_bill_items 
inner join bb_items
    on  bb_bill_items.item_id = bb_items.item_id 
inner join bb_catg 
on bb_items.catg_id  = bb_catg.catg_id
inner join bb_bill
    on bb_bill_items.bil_id  = bb_bill.bil_id
where dateandtime = '$date' and paymenttype = '$Status'
group by bb_catg.catg_name,bb_items.bi_item_name
order by bb_catg.catg_name

可以在Group By子句中添加具有其他列的聚合函数。

Group By无效,将不会在较新的MySQL版本上执行(除非处于兼容模式)。常规Group By规则说明:如果指定Group By子句,选择列表中的每个列引用必须标识分组列或是集合函数的参数!不能同时使用
orderby
rollup
,这是MySQL的一个文档限制。你能解释一下你想要什么样的输出,以便你认为你需要order by和rollup吗?这在我的查询中不是无效的,它给出了结果,但不是我想要的结果。@jarlh或在MySQL的最新版本中,它们在功能上依赖于分组列(例如,它们的值对于一个组中的所有记录都必须相同).我已经显示了我想要@Shadow的输出,但是当我删除订单时,我可以将列TotalQty作为3,Grandtotal作为770,但是最后一个bi_item_名称和catg_名称复制到第四列,GROUP by无效,将不会在较新的MySQL版本上执行(除非处于兼容模式)常规GROUP BY规则说:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数!不能同时使用
orderby
rollup
,这是MySQL的一个文档限制。你能解释一下你想要什么样的输出,以便你认为你需要order by和rollup吗?这在我的查询中不是无效的,它给出了结果,但不是我想要的结果。@jarlh或在MySQL的最新版本中,它们在功能上依赖于分组列(例如,它们的值对于一个组中的所有记录都必须相同).我已经显示了我想要@Shadow的输出,但是当我删除订单时,我可以得到汇总,列TotalQty为3,Grandtotal为770,但最后一个bi_项目名称和catg_名称复制到第四列remove order by和add rollup中,我想就是这样。正如我说过的,我已经删除了order by和use roll up,但问题是我在最后一列得到了重复的item_nam和catg_名称,而不是空值@Shadow@Nikunj我需要对我的案例中的两列(数量,总计)进行汇总。更改group by子句中的列名对我不起作用。删除order by和add rollup,我想就是这样。正如我所说的,我已经删除了order by和use rollup,但问题是我在最后一列得到了重复的项名称,而不是空值@Shadow@Nikunj我需要一个两栏的汇总表(Qty,Grandtotal)在我的情况下。更改GROUPBY子句中的列名对我不起作用。