0

我有一个 MySQL 数据库,使用以下代码创建(确保还有其他表,但根据这个特定问题,它们不相关):

DROP TABLE IF EXISTS `Jeweller`.`Product_sales`;
CREATE TABLE `Jeweller`.`Product_sales` (
  `sale_id` int(11) unsigned NOT NULL,
  `product_id` int(11) NOT NULL,
  `quantity` int(11),
  `value` float,
  FOREIGN KEY (`sale_id`) REFERENCES `Jeweller`.`Sales`(`id`),
  FOREIGN KEY (`product_id`) REFERENCES `Jeweller`.`Products`(`id`),
  CHECK (`quantity`>0),
  CHECK (`value`>0)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `Jeweller`.`Products`;
CREATE TABLE `Jeweller`.`Products` (
  `id` int(11) unsigned NOT NULL,
  `product_category_id` int(11) NOT NULL,
  `seller_id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `description` text,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`product_category_id`) REFERENCES `Jeweller`.`Product_categories`(`id`),
  FOREIGN KEY (`seller_id`) REFERENCES `Jeweller`.`Sellers`(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `Jeweller`.`Sales`;
CREATE TABLE `Jeweller`.`Sales` (
  `id` int(11) unsigned NOT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

您将如何寻找:

  • 每月总收入(数量*价值)(2013 年 - 或任何特定年份)

我首先尝试将月份排除在DATE字段之外(使用 DATEPART),但我已经遇到了麻烦......

那么,有什么想法吗?


附言

  • 我不是 SQL 专家
  • 以上只是一个例子,并不是确切的代码
4

1 回答 1

4
SELECT   MONTH(s.date) month, SUM(p.quantity * p.value)
FROM     Jeweller.Sales s
    JOIN Jeweller.Product_sales p ON p.sale_id = s.id
WHERE    s.date >= '2013-01-01' AND s.date < '2014-01-01'
GROUP BY month

请注意,如果日期范围跨越多年,您将需要按年月进行分组。

于 2013-06-11T08:45:55.730 回答