如何在同一个表中选择两个完全不同的数据集?

时间:2015-11-19 01:44:38

标签: mysql

道歉。我发现的一切都压碎了几百万条记录的数据库。

假设我有一个名为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

以上是过于简单化,但希望它能产生一个有用的样本。

1 个答案:

答案 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的电子邮件的不同状态和计数。如果您的表将狗条目作为行,则需要编写嵌套查询,导致每个用户的总狗数。