mysql group by分组后查询无数据补0
在MySQL中,使用GROUP BY
进行分组后查询,如果某些分组没有数据,可以通过左连接(LEFT JOIN
)一个包含所有分组的虚拟表来补0。
以下是一个示例,假设有一个sales
表,包含year
和amount
两个字段,我们要按year
分组并对每个年份统计销售额,即使某些年份没有销售数据也会显示0。
CREATE TABLE sales (
year INT,
amount DECIMAL(10, 2)
);
-- 插入示例数据
INSERT INTO sales (year, amount) VALUES (2020, 100.00);
INSERT INTO sales (year, amount) VALUES (2021, 150.00);
-- 创建一个包含所有分组的虚拟表
CREATE TABLE years (year INT);
-- 插入所有可能的年份
INSERT INTO years (year) VALUES (2020);
INSERT INTO years (year) VALUES (2021);
INSERT INTO years (year) VALUES (2022);
-- 使用LEFT JOIN补0
SELECT y.year, COALESCE(SUM(s.amount), 0) AS total_amount
FROM years y
LEFT JOIN sales s ON y.year = s.year
GROUP BY y.year;
-- 结果将是
-- +---------+-------------+
-- | year | total_amount|
-- +---------+-------------+
-- | 2020 | 100.00|
-- | 2021 | 150.00|
-- | 2022 | 0.00|
-- +---------+-------------+
在这个查询中,我们首先创建了一个包含所有年份的years
表,然后使用LEFT JOIN
将这个表与sales
表连接起来。通过GROUP BY
对年份进行分组,并使用COALESCE
确保没有数据的年份展示为0。这样就可以得到包含所有分组且对于没有数据的分组会显示0的结果集。
评论已关闭