我有两个根据多个条件计算雇员总数的查询;唯一改变的是最后两个AND子句;我不知道如何在同一查询中返回结果。第一个查询
SELECT
COUNT(*)
FROM
(
SELECT
E.NAME,
E.LAST_NAME,
E.BIRTH_DATE,
E.ID
FROM
EMPLOYEES E
WHERE E.BIRTH_DATE BETWEEN '2022-10-18 00:00:00' AND '2022-10-18 23:59:59'
AND E.NAME IS NOT NULL
AND E.LAST_NAME IS NOT NULL
GROUP BY E.NAME, E.LAST_NAME, E.BIRTH_DATE,E.ID
) AUX;
第二个查询
SELECT
COUNT(*)
FROM
(
SELECT
E.NAME,
E.LAST_NAME,
E.BIRTH_DATE,
E.ID
FROM
EMPLOYEES E
WHERE E.BIRTH_DATE BETWEEN '2022-10-18 00:00:00' AND '2022-10-18 23:59:59'
AND E.NAME IS NULL
AND E.LAST_NAME IS NULL
GROUP BY E.NAME, E.LAST_NAME, E.BIRTH_DATE,E.ID
) AUX;
预期输出:
| 总计|
| - -|
| 3 --第一行|
| 5 --第二行|
2条答案
按热度按时间2nbm6dog1#
最快的方法(即,最少的重写量)是简单的
UNION
您的查询一起这样:| 列1|计数(*)|
| - -|- -|
| 空名称|一个|
| 不为空|三个|
您还可以使用条件聚合,它使用较少的真实的空间并且非常易于阅读,并使用以下内容在列中生成输出......
| 空名称|非空|
| - -|- -|
| 一个|三个|
np8igboo2#
| 已命名|未命名的|
| - -|- -|
| 三个|五个|
与联合不同,这不需要两个单独的查询。只需要对结果集进行一次传递。
但你要求把结果分开列,所以......
| 拆巢|
| - -|
| 三个|
| 五个|
这会将两个结果放入一个数组中,然后将结果取消嵌套到单独的行中,同时仍保持相同的查询效率。