在一个查询中计算用户和组总数
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
值(Null
为 group_id
)和不同的 group_id
值(Null
为 user_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
值,这就是我添加该辅助查询的原因。 :-)以上是关于在一个查询中计算用户和组总数的主要内容,如果未能解决你的问题,请参考以下文章