在一个查询中计算用户和组总数

Posted

技术标签:

【中文标题】在一个查询中计算用户和组总数【英文标题】:Count users and groups totals in one query 【发布时间】:2018-10-21 07:43:19 【问题描述】:

我对访问非常陌生,并且在查询时遇到困难。我的表(tblpacks)如下:

 id user_id group_id quota_id
 1    1        1       1
 2    1        2       1
 3    2        1       1
 4    3        1       1

理想情况下,我现在要获取 quota_id=1 的唯一用户和组的数量

结果将是:

       total_users = 3
       total_groups = 2

【问题讨论】:

【参考方案1】:

如果你只想计算一个字段,可以通过一个简单的solution,但由于你想计算2个单独的字段,实际上你至少需要2个单独的查询。

我的答案是使用 UNION 查询作为计数源。此 UNION 查询返回不同的 user_id 值(Nullgroup_id)和不同的 group_id 值(Nulluser_id)。我省略了 DISTINCT 关键字,因为 UNION(没有 ALL)会自动执行 DISTINCT 查询。由于在 UNION 查询的第一个 SELECT 语句中使用常量 Null 字段时无法正确识别的数据类型,我添加了第三个 SELECT 语句作为第一个,它从表中选择两个字段但不返回任何记录:

SELECT Count(user_id) AS total_users, Count(group_id) AS total_groups
FROM (
  SELECT user_id, group_id FROM tblpacks WHERE Yes=No
  UNION
  SELECT user_id, Null FROM tblpacks WHERE quota_id=1
  UNION
  SELECT Null, group_id FROM tblpacks WHERE quota_id=1
) AS qsub;

【讨论】:

只需将其重写为 null as group_id / null as client_id 以避免第一个 Yes=No 查询,它会产生相同的结果,而且速度也不错。谢谢凯斯 欢迎您,并且很高兴知道在没有 Yes=No 查询的情况下进行计数。我单独测试了 UNION 查询并没有看到 group_id 值,这就是我添加该辅助查询的原因。 :-)

以上是关于在一个查询中计算用户和组总数的主要内容,如果未能解决你的问题,请参考以下文章

win10系统本地用户和组在哪

win10计算机管理中没有本地用户和组怎么办

Linux中如何创建管理及查询用户和组

Linux用户和组管理

【Centos基础篇】之用户和组

win10本地用户和组下有这么多组,哪些可以删除?如何删除?