【发布时间】:2021-01-11 11:21:06
【问题描述】:
我有以下表格:
日历(用于报告)
表格
CREATE TABLE `calendars` (
`date` date NOT NULL,
PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
样本
INSERT INTO `calendars`(`date`)
VALUES
('2020-05-20'),
('2020-05-21'),
('2020-05-22'),
('2020-05-23');
个人
表格
CREATE TABLE `individuals` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`accepted_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=705 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
样本
INSERT INTO `individuals`(`name`, `accepted_at`)
VALUES
('Zen', '2020-05-20'),
('John', '2020-05-21'),
('Jane', '2020-05-21'),
('Mary', '2020-05-21'),
('Ben', '2020-05-22');
组织
表格
CREATE TABLE `organizations` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`accepted_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=705 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
样本
INSERT INTO `organizations`(`name`, `accepted_at`)
VALUES
('Ethan', '2020-05-21');
我正在尝试计算两个表(个人和组织)中具有给定日期的行,但如果表中的日期相同,则仅返回最高计数值。
我一直在使用的查询:
SELECT
`calendars`.`date` as 'date',
COUNT(`individuals`.`accepted_at`) as 'individuals',
COUNT(`organizations`.`accepted_at`) as 'organizations'
FROM `calendars`
LEFT JOIN `individuals`
ON DATE(`calendars`.`date`) = DATE(`individuals`.`accepted_at`)
LEFT JOIN `organizations`
ON DATE(`calendars`.`date`) = DATE(`organizations`.`accepted_at`)
WHERE DATE(`calendars`.`date`) BETWEEN "2020-05-20" AND "2020-05-30"
GROUP BY `date`;
结果
【问题讨论】:
-
这不是已发布样本数据的结果,请将样本数据发布为我们可以使用的文本,而不是我们不能使用的图像;
-
@P.Salmon 刚刚添加了表架构和示例数据
标签: mysql group-by count left-join where-clause