sql - 复杂的 SQL 查询 - 查找一组内容,对其进行计数,然后查找第一个集合的子集,并对其进行计数

标签 sql join count

我有三个表,我们将它们称为 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/

相关文章:

SQL Server 查询 : Host name

mysql - SQL 从表中选择

mysql - SQL 语句中一个对象的多个计数

join - 如何使用 join 命令或 awk 打印未连接行?

Python:字符串连接对象的多个属性

java - Hibernate:动态连接多个表

count - 按类别计数的 DAX 列

java - Hibernate Criteria - 获取子选择的计数

mysql - 3 个表的 SQL 计数

sql - 是否有 SQL 表约束来确保两列之间存在关系?