gpt4 book ai didi

sql - 合并和组?

转载 作者:可可西里 更新时间:2023-11-01 07:50:48 29 4
gpt4 key购买 nike

好的。我有一个看起来像这样的查询:

SELECT
SUM(`order_items`.`quantity`) as `count`,
`menu_items`.`name`
FROM
`orders`,
`menu_items`,
`order_items`
WHERE
`orders`.`id` = `order_items`.`order_id` AND
`menu_items`.`id` = `order_items`.`menu_item_id` AND
`orders`.`date` >= '2008-11-01' AND
`orders`.`date` <= '2008-11-30'
GROUP BY
`menu_items`.`id`

此查询的目的是显示在给定日期范围内售出的商品数量。虽然这行得通,但我现在需要它显示 0count 如果特定商品在日期范围内没有销售。我尝试在 SUM 周围使用 COALESCE 但这并没有奏效,而且我真的没想到会这样。无论如何,有谁知道我将如何实现这一目标?我正在经历这样的时刻之一,我觉得我应该知道这一点,但我想不起来。

干杯

最佳答案

这可以在没有任何子查询的情况下完成,如果将日期条件放在 JOIN 子句中。

下面是我在 MySQL 5.0 上测试的代码。

SELECT m.name, COALESCE(SUM(oi.quantity), 0) AS count
FROM menu_items AS m
LEFT OUTER JOIN (
order_items AS oi JOIN orders AS o
ON (o.id = oi.order_id)
) ON (m.id = oi.menu_item_id
AND o.`date` BETWEEN '2008-11-01' AND '2008-11-30')
GROUP BY m.id;

输出:

+--------+-------+
| name | count |
+--------+-------+
| bread | 2 |
| milk | 1 |
| honey | 2 |
| cheese | 0 |
+--------+-------+

这是 MySQL 风格的 DDL 和设置代码:

DROP TABLE IF EXISTS menu_items;
CREATE TABLE menu_items (
id INT PRIMARY KEY,
name VARCHAR(10)
) TYPE=InnoDB;

DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
id INT PRIMARY KEY,
`date` DATE
) TYPE=InnoDB;

DROP TABLE IF EXISTS order_items;
CREATE TABLE order_items (
order_id INT,
menu_item_id INT,
quantity INT,
PRIMARY KEY (order_id, menu_item_id),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (menu_item_id) REFERENCES menu_items(id)
) TYPE=InnoDB;

INSERT INTO menu_items VALUES
(1, 'bread'),
(2, 'milk'),
(3, 'honey'),
(4, 'cheese');

INSERT INTO orders VALUES
(1, '2008-11-02'),
(2, '2008-11-03'),
(3, '2008-10-29');

INSERT INTO order_items VALUES
(1, 1, 1),
(1, 3, 1),
(2, 1, 1),
(2, 2, 1),
(2, 3, 1),
(3, 4, 10);

关于sql - 合并和组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263816/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com