我有三个表,我们称之为table1,table2和table3.让我们说每个表都有一个用户ID列和一个日期列.我想要做的是能够计算table1中具有特定用户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
Run Code Online (Sandbox Code Playgroud)
或者尝试的替代方案可能会使Imre更快乐.
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
Run Code Online (Sandbox Code Playgroud)