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子句中的列名对我不起作用。