Php 在这种情况下,如何从具有不同where条件和不同分组条件的同一表中进行选择?

Php 在这种情况下,如何从具有不同where条件和不同分组条件的同一表中进行选择?,php,mysql,sql,Php,Mysql,Sql,基本上这就是我想要实现的,但我不知道如何在一个查询中完成,我不知道是否可以在一个查询中完成 问题1: SELECT cityId, COUNT(cityId) FROM data WHERE streetId IS NULL AND houseId IS NULL GROUP BY cityId 问题2: SELECT cityId, streetId, COUNT(streetId) FROM

基本上这就是我想要实现的,但我不知道如何在一个查询中完成,我不知道是否可以在一个查询中完成

问题1:

SELECT 
    cityId, 
    COUNT(cityId) 
FROM 
    data 
WHERE 
    streetId IS NULL 
    AND houseId IS NULL 
GROUP BY cityId
问题2:

SELECT 
    cityId, 
    streetId, 
    COUNT(streetId) 
FROM 
    data 
WHERE 
    streetId IS NOT NULL 
    AND houseId IS NULL 
GROUP BY 
    streetId
问题3:

SELECT 
    cityId, 
    streetId, 
    houseId, 
    COUNT(houseId) 
FROM
    data 
WHERE 
    streetId IS NOT NULL 
    AND houseId IS NOT NULL 
GROUP BY 
    houseId
有没有一种方法可以在一个查询中实现这一点?

好的,您可以使用UNION ALL将三个查询的结果组合在一起。这要求您调整查询,以便它们都返回相同的列。当在原始查询中不可用时,我用NULL填充其他列

SELECT 
    cityId, 
    NULL street_id, 
    NULL houseId, 
    COUNT(cityId) cnt 
FROM
    data 
WHERE 
    streetId IS NULL 
    AND houseId IS NULL 
GROUP BY 
    cityId
UNION ALL SELECT 
    cityId, 
    streetId, 
    NULL, 
    COUNT(streetId) 
FROM 
    data 
WHERE 
    streetId IS NOT NULL 
    AND houseId IS NULL 
GROUP BY 
    streetId
UNION ALL SELECT 
    cityId, 
    streetId, 
    houseId, 
    COUNT(houseId) 
FROM
    data 
WHERE 
    streetId IS NOT NULL 
    AND houseId IS NOT NULL 
GROUP BY 
    houseId
:


这不是你想要的吗

SELECT cityId, streetId, houseId, COUNT(*) 
FROM data 
GROUP BY cityId, streetId, houseId;

由于不同的分组要求,可能不可能在单个查询中更有效地获得这些结果。但你到底想实现什么?谢谢你的DB小提琴!现在,您只需要向我们展示您的预期输出…@Nick在实际情况中,我需要使用它进行通知,并且我需要不断查询数据库以检查是否有新的通知,我认为在单个查询中执行该操作会更有效。
SELECT cityId, streetId, houseId, COUNT(*) 
FROM data 
GROUP BY cityId, streetId, houseId;