繁体   English   中英

调整SQL查询以使用group_concat获得计数

[英]Adjust sql query to get count with group_concat

我有以下查询,其中列出了订单以及订购的商品。

select 
    `orders`.*, 
    DATE_FORMAT(orders.created_at, '%d.%m.%Y %h:%i%p') as date, 
    `oi`.`items` 
        from `orders` 
    inner join 
        (
            select 
                order_id,
                count(item_name) as count,
                group_concat(item_name SEPARATOR ",") as items 
                    from orders_items 
                    group by order_id
        ) 
    as oi on `oi`.`order_id` = `orders`.`id`

我的表设置如下:

命令

id
1
2
3

orders_items

id    order_id    item_name
1     1           Class Voucher
2     1           Class Voucher
3     1           Class Voucher
4     1           The Cook Book

在当前查询中,当我输出它时, items列看起来像这样:

Class Voucher,Class Voucher,Class Voucher,The Cook Book

如何更改它,以便每个项目旁边都有一个计数,而不是列出每个项目的名称。 因此,我希望items包含以下内容:

3 x Class Voucher
1 x The Cook Book

提前致谢。

您可以分两个步骤到达那里:首先对项目进行计数,然后按订单获取所有项目及其计数:

select 
  orders.*, 
  DATE_FORMAT(orders.created_at, '%d.%m.%Y %h:%i%p') as date, 
  oi.items 
from orders 
inner join 
(
  select order_id,  group_concat(concat(cnt, ' x ', item_name)) as items 
  from
  (
    select order_id, item_name, count(*) as cnt
    from orders_items 
    group by order_id, item_name
  ) as counted
  group by order_id
) as oi on oi.order_id = orders.id;

除了上述查询之外:

select    orders.*,    DATE_FORMAT(orders.created_at, '%d.%m.%Y
%h:%i%p') as date,    oi.items  from orders  inner join  (   select
order_id,  group_concat(concat(cnt, ' x ', item_name)) as items   
from   (
select order_id, item_name, count(*) as cnt
from orders_items 
group by order_id, item_name   ) as counted   group by order_id ) as oi on oi.order_id = orders.id;

我会加一个

Having Count(*)>0

消除数量为0的任何物品

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM