要计算的特定 SQL 查询 [重复]

Posted

技术标签:

【中文标题】要计算的特定 SQL 查询 [重复]【英文标题】:Specific SQL query to count [duplicate] 【发布时间】:2020-05-28 22:36:14 【问题描述】:

我正在开发一个 CRM,这就是我创建杆来分隔我的用户的原因。

我创建了一个视图来收集用户的所有信息。

我想知道如何统计极点登录的用户数。

在我的视图中,我有一个 user_online 字段。

我还有一个pole_name 字段。

我尝试了这个请求,但它不起作用。

SELECT pole_name, COUNT(user_online) AS nbr_online FROM `ViewProjet_userPoleRole` GROUP BY pole_name

这给了我一个杆子的用户总数,因此如果它在线则不是。

最后,这是我的全部视图。

我已经尝试了几个请求,但我不能。

【问题讨论】:

也许您可以共享两个表的基本定义。另外你的查询结果是什么? 我刚刚编辑了我的问题。 【参考方案1】:

试试这个:

SELECT pole_name, COUNT(user_id) AS nbr_online 
FROM `ViewProjet_userPoleRole` 
WHERE user_online = 1
GROUP BY pole_name

希望这会有所帮助

或者如果想同时显示在线和离线计数,您可以尝试以下操作:

SELECT pole_name, SUM(if(user_online = 1,1,0)) as nbr_online, SUM(if(user_online = 0,1,0)) as nbr_offline 
FROM `ViewProjet_userPoleRole` 
GROUP BY pole_name

试试这个。

【讨论】:

感谢您的回复。您的请求有效,但仅返回已连接用户的极点。我还需要显示所有用户都已注销的杆子。 SELECTpole_name, SUM(if(user_online = 1,1,0)) as nbr_online, SUM(if(user_online = 0,1,0)) as nbr_offline FROM ViewProjet_userPoleRole GROUP BYpole_name 非常感谢您的帮助,它也可以这样工作。 你我的代码对你有帮助,那么请点赞我的答案等等。 我刚做了,再次感谢。【参考方案2】:

我认为你可以使用条件聚合如下:

SELECT
    POLE_NAME,
    SUM(CASE WHEN USER_ONLINE = 'Y' THEN 1 ELSE 0 END) AS NBR_ONLINE
FROM VIEWPROJET_USERPOLEROLE
GROUP BY POLE_NAME

或者如果您只想知道至少有一个在线用户的波兰人,那么将条件放在WHERE 子句中,如下所示:

SELECT
    POLE_NAME,
    COUNT(1) AS NBR_ONLINE
FROM VIEWPROJET_USERPOLEROLE
WHERE USER_ONLINE = 'Y'
GROUP BY POLE_NAME

如果您通过其他类型的规范代表在线用户,则在CASE 语句的WHEN 子句中相应地使用它们。

干杯!!

【讨论】:

感谢您的回复。您的请求将两极发回给我,但不是在线用户数量。我的印象是它被颠倒了,而是向我显示了离线用户的数量。 不同意!!!它正在计算USER_ONLINE = 'Y' 的记录数 “Y”是什么意思?我认为您的要求是正确的。 从我的回答中读到这一点:如果您通过其他某种规范代表在线用户,则在 CASE 语句的 WHEN 子句中相应地使用它们。 我没见过,谢谢你的澄清,我会记住这一课的!

以上是关于要计算的特定 SQL 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:对 CASE WHEN 重复使用子查询,而无需重复子查询

用于计算重复项的 SQL 查询 [重复]

以特定块返回SQL查询? [重复]

SQL选择特定的数据[重复]

SQL查询,如何去除重复的记录?

sql 怎么查询不重复数据