我有三个表,我们将它们称为 table1、table2 和 table3。假设每个表都有一个用户 ID 列和一个日期列。我想要做的是能够计算表 1 中具有特定用户 ID 的行数,并将其与表 2 和表 3 中具有该用户 ID 的行数相加。
然后,我想进行第一个查询,其中包含带有用户 ID 的所有行,然后取出并计算日期列大于某个日期(unix 时间)的行。
我最终想要收到的只有两件事。表 1、表 2 和表 3 中具有我要查找的用户 ID 的行数相加,以及表 1、表 2 和表 3 中具有我要查找的用户 ID 的行数,同时也在特定时间之后日期相加。
最有效的方法是什么?
谢谢!
最佳答案
SELECT
COUNT(*) AS TotalPets,
SUM(CASE WHEN date > somedate THEN 1 ELSE 0 END) AS TotalPetsAfterDate
FROM
(
SELECT date FROM dogs WHERE UserId = 9
UNION ALL
SELECT date FROM cats WHERE UserId = 9
UNION ALL
SELECT date FROM ferrets WHERE UserId = 9
) Pets
或者尝试一种可能让伊姆雷更快乐的替代方案。
SELECT
SUM(PetsSubTotal) AS TotalPets,
SUM(PetsAfterDateSubTotal) AS TotalPetsAfterDate
FROM
(
SELECT COUNT(*) AS PetsSubTotal, SUM(CASE WHEN date > somedate THEN 1 ELSE 0 END) AS PetsAfterDateSubTotal
FROM dogs
WHERE UserId = 9
UNION ALL
SELECT COUNT(*) AS PetsSubTotal, SUM(CASE WHEN date > somedate THEN 1 ELSE 0 END) AS PetsAfterDateSubTotal
FROM cats
WHERE UserId = 9
UNION ALL
SELECT COUNT(*) AS PetsSubTotal, SUM(CASE WHEN date > somedate THEN 1 ELSE 0 END) AS PetsAfterDateSubTotal
FROM ferrets
WHERE UserId = 9
) SubTotals
关于sql - 复杂的 SQL 查询 - 查找一组内容,对其进行计数,然后查找第一个集合的子集,并对其进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169390/