道歉。我发现的一切都压碎了几百万条记录的数据库。
假设我有一个名为users的表,列有:city,state,email,dogs
我想将这两个查询合并为一张。通常我在PHP中使用它并使用两个查询。今天我想学习SQL如何正确。但是每个查询都会破坏我的数据库。
实施例, 问题#1
SELECT state,count(distinct email),sum(dogs)
FROM users
GROUP BY state
和#2
SELECT state,count(distinct email),sum(dogs)
FROM users
WHERE dogs > 3
GROUP BY state
报告的最终结果:
State,Count of People, People with > 3 dogs
Minnesota,1291,32
Wisconsin,101,5
以上是过于简单化,但希望它能产生一个有用的样本。
答案 0 :(得分:1)
因此,sum聚合不计算空值。您将使用案例陈述来确定特定记录是否应计算在内:
SELECT
State,
COUNT(DISTINCT
CASE WHEN Dogs > 3 THEN Email
ELSE NULL
END) QtyUsersWithManyDogs,
COUNT(DISTINCT Email) QtyUsers
FROM Users
GROUP BY State
此代码将导致狗字段大于3的电子邮件的不同状态和计数。如果您的表将狗条目作为行,则需要编写嵌套查询,导致每个用户的总狗数。