gpt4 book ai didi

mysql - COUNT(*) 计数不正确

转载 作者:行者123 更新时间:2023-11-30 23:07:35 25 4
gpt4 key购买 nike

我在使用 mysql 查询时遇到问题。

SELECT switch_id, port_id, isp_service.service, isp_service.id
FROM traffic, isp_service
WHERE datetime>='2013-09-01 00:00:00'
AND datetime<'2013-09-02 00:00:00'
AND isp_service.id=traffic.isp_service_id
GROUP BY switch_id, port_id

此查询返回 1000 行。现在我要计算每项服务有多少用户,我这样做了:

SELECT ris.id, COUNT(*) as numberOfUsers
FROM
(SELECT switch_id, port_id, isp_service.service, isp_service.id
FROM traffic, isp_service
WHERE datetime>='2013-09-01 00:00:00'
AND datetime<'2013-09-02 00:00:00'
AND isp_service.id=traffic.isp_service_id
GROUP BY switch_id, port_id)ris
GROUP BY ris.id
ORDER BY ris.id

现在,如果我对 numberOfUser 列求和,结果怎么可能大于 1000?

最佳答案

您应该了解正确的 join 语法并为所有列添加表别名前缀。编写第二个查询的更好方法是:

SELECT ris.id, COUNT(*) as numberOfUsers
FROM (SELECT switch_id, port_id, s.service, s.id
FROM traffic t join
isp_service s
on s.id = t.isp_service_id
WHERE datetime >= '2013-09-01 00:00:00' AND datetime < '2013-09-02 00:00:00'
GROUP BY switch_id, port_id
) ris
GROUP BY ris.id
ORDER BY ris.id;

这个查询有问题,因为 s.services.id 包含在 select 中,但它们不在分组依据。这意味着 MySQL 为它们取任意值。

不清楚是什么指定了“用户”。如果 switch_id/port_id 对标识了一个用户,那么查询应该会产生正确的结果。但是,您可能会丢失包含用户的 id 值。您可以在一个查询中执行此操作:

SELECT s.id, count(*) as NumberOfUsers, count(distinct switch_id, port_id) as NumberOfUsers2
FROM traffic t join
isp_service s
on s.id = t.isp_service_id
WHERE datetime >= '2013-09-01 00:00:00' AND datetime < '2013-09-02 00:00:00'
GROUP BY s.id;

我不确定哪个计数最合适。

关于mysql - COUNT(*) 计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com