MySQL聚合具有特定条件,取决于行

时间:2019-06-14 07:19:38

标签: mysql

我正在尝试找出如何根据累加的特定行向累加添加额外条件。

我想做的是这样的:

select @datee := DATE_FORMAT(date, "%Y-%m") datee, count(distinct name) new
from requests where name not in (select name from requests where DATE_FORMAT(date, "%Y-%m") != @datee) 
group by datee;

换句话说:对于每个日期,它应该显示仅在该特定月份出现的名称数量。

结果可能如下所示:

datee   new
2018-11 343  <-- all these names only occur in 2018-11
2018-12 384  <-- all these names only occur in 2018-12
2019-01 438  ...
2019-02 460  ...
2019-03 442
2019-04 463
2019-05 470
2019-06 290

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用简化版本的数据,您可以检查名称仅在一个月内出现,并与count(distinct)连接。

drop table if exists t;
create table t
(name varchar (1), mm int);

insert into t values
('a',1),('a',2),('a',3),
('b',2),
('c',1),('c',1),
('d',3),
('e',2),('e',2);



select mm,count(distinct t.name) obs
from t
join
(
select name, count(distinct mm) occurances
from
t 
group by name having occurances = 1 
) s on s.name = t.name
group by mm;

+------+-----+
| mm   | obs |
+------+-----+
|    1 |   1 |
|    2 |   2 |
|    3 |   1 |
+------+-----+
3 rows in set (0.00 sec)

请注意,a消失了,因为这三个月都出现了。