gpt4 book ai didi

mysql - 如何获得mysql分组计数的总和

转载 作者:行者123 更新时间:2023-11-29 06:26:12 24 4
gpt4 key购买 nike

我的查询只是返回并进行分组,但我需要组的总和。 。代码:

select   a.date, count(*) 
from employee a
inner join department b on a.uid = b.id
where date(a.date) between current_date-2 and current_date
group by 1 having count(*)>1
order by date

我的输出:

           date       count
November 18,2019 2
November 18,2019 4
November 18,2019 2
November 19,2019 2
November 19,2019 2

预期输出:

           date       count
November 18,2019 8
November 19,2019 4

最佳答案

这里只是一个猜测。没有足够的信息进行诊断。

MySQL 从 DATE 或 DATETIME 数据类型返回 'November 18,2019' 非常奇怪。我的猜测是 a.date 是 DATETIME 数据类型并包含时间组件。

看起来我们想去掉时间部分,只保留一个 DATE 值,然后按该值进行分组。

再说一次,我只是猜测问题。

就我个人而言,我会编写如下查询:

 SELECT DATE(a.date)    AS `date_` 
, COUNT(*) AS `cnt_`
FROM employee a
JOIN department b
ON b.id = a.uid
WHERE a.date >= DATE(NOW()) + INTERVAL -2 DAY
AND a.date < DATE(NOW()) + INTERVAL +1 DAY
GROUP BY DATE(a.date)
HAVING COUNT(*) > 1
ORDER BY DATE(a.date)
<小时/>

跟进

前面的查询演示了一个典型的模式,当我们想要按天获取总计数时,当我们有一个 DATETIME 列时;对返回 DATE 值的表达式执行 GROUP BY,而不是对 DATETIME 列执行 GROUP BY。

上一个查询令人头疼地忽略了查询如何返回一个奇怪的 'November 18,2019' 显然是 VARCHAR 值,它的 DATE() 会如何产生除了错误或 NULL 之外的任何内容,以及如何满足 DATE 值的 BETWEEN 条件。

但是抛开所有这些困惑,并尝试更直接地回答所提出的问题:如何获得计数的总和。

一种方法是获取返回计数的查询,并将其转换为内联 View 。

请注意,这是实现结果的错误方式,但为了通过演示的方式更直接地回答问题,结合原始查询的精确 SQL 文本:

  SELECT v.date 
, SUM(v.`count(*)`)
FROM ( -- inline view
-- original (wrongish-looking weird-ass) query start here

select a.date, count(*)
from employee a
inner join department b on a.uid = b.id
where date(a.date) between current_date-2 and current_date
group by 1 having count(*)>1
order by date

-- original query ends here
) v
GROUP BY v.date
ORDER BY v.date

上面的查询可能会返回问题中显示的“预期结果”。但我强烈怀疑此查询的返回实际上满足原始规范。

关于mysql - 如何获得mysql分组计数的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396251/

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