Php 在这种情况下,如何从具有不同where条件和不同分组条件的同一表中进行选择?
基本上这就是我想要实现的,但我不知道如何在一个查询中完成,我不知道是否可以在一个查询中完成 问题1: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
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;