提问者:小点点

mysql查询连接两个表,group by并获取sum


它是关于从按日期分组的加入订单中获取和产品的数量和名称

我有两张桌子:

CREATE TABLE IF NOT EXISTS `orderproduct` (
  `id` int(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `quantity` int(3) NOT NULL,
  `name` varchar(100) NOT NULL,
  `fk_orders_id` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `orderproduct` (`id`, `quantity`, `name`, `fk_orders_id`) VALUES
(1, 3, 'Boulgour de bléss', 1),
(2, 2, 'Casarecce d\'épeautre', 1),
(3, 1, 'Cerneaux de noix', 1),
(5, 2, 'Boulgour de bléss', 3),
(6, 2, 'Casarecce d\'épeautre', 3),
(7, 4, 'Casarecce d\'épeautre', 4),
(8, 4, 'Cerneaux de noix', 4);
INSERT INTO `orders` (`id`, `date`) VALUES
(1, '2020-06-29 17:02:11'),
(3, '2020-06-29 10:56:47'),
(4, '2020-06-30 11:20:24');
DROP TABLE IF EXISTS `orders`;
CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `date` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

以订单按日期分组并从其相同的产品数量中求和为例:

第29/6号命令

>

  • 产品A数量=1

    产品B数量=2

    产品C数量=3

    第29/6号命令

    • 产品a数量=4

    订单30/6

    >

  • 产品A数量=1

    产品B数量=2

    我对mysql的了解是基本的,目前我已经试过了:

    SELECT      o.date, p.name, sum(p.quantity)
    FROM       `orders` o , `orderproduct` p
    WHERE       p.fk_orders_id = o.id
    GROUP BY    p.name
    

    数量之和按产品分组,但不知道如何按订单日期分组。 我也尝试了一些子查询(我知道这不起作用,因为sub q;返回超过1行并且应该在'in'中使用,但它只是用来说明IDéé):

    select o.date,p.name, (
                    SELECT      sum(p.quantity)
                    FROM        `orderproduct` p
                    GROUP BY    p.name
                    )
    FROM  `orders` o , `orderproduct` p
    WHERE p.fk_orders_id = o.id
    

    所需的结果可以是:order.date productname Product.SumQuantity(名称字段)

    2020-06-29“Boulgour de Bléss”5,“Casarecce d'épeautre”4,“Cerneaux de Noix”1

    2020-06-30'Casarecce d'épeautre'4,'Cerneaux de noix'4,


  • 共1个答案

    匿名用户

    感谢@mdranahossain提供的解决方案

    SELECT date(o.date) date, p.name, sum(p.quantity) 
    from orderproduct p, orders o 
    where o.id = p.fk_orders_id 
    GROUP by date(o.date), p.name