Mysql 与“分组依据”不同的计数不与>=

Mysql 与“分组依据”不同的计数不与>=,mysql,sql,group-by,distinct,Mysql,Sql,Group By,Distinct,我有这样的声明: SELECT COUNT(DISTINCT(p.`id`)) as players, COUNT(DISTINCT(IF(p.`created` >= 'startDate', p.`id`, NULL))) as newPlayers FROM `player` p WHERE p.`date` >= 'startDate' AND p.`date` < 'endDate' GROUP BY DAY(p.`date`); 选择 将(不同的(p.`

我有这样的声明:

SELECT 
COUNT(DISTINCT(p.`id`)) as players, 
COUNT(DISTINCT(IF(p.`created` >= 'startDate', p.`id`, NULL))) as newPlayers 
FROM `player` p 
WHERE p.`date` >= 'startDate' AND p.`date` < 'endDate' 
GROUP BY DAY(p.`date`);
选择
将(不同的(p.`id`)计数为玩家,
作为新玩家计数(不同(如果(p.`created`>='startDate',p.`id`,NULL)))
从'player`p
其中p.`date`>='startDate'和p.`date`<'endDate'
按天分组(p.`date`);
解释:

我有一段时间,比如从2019-11-11到2019-12-13

我想了解这段时间内的球员人数和新球员人数,但以天为单位

“玩家计数”功能完美,但“新玩家”则不然

它不是按天计算,而是按时段计算

例如:

如果我在2019-11-13有一个新玩家,在2019-11-14又有一个新玩家,那么我希望2019-11-13有一个新玩家,2019-11-14有一个新玩家,但2019-11-13有一个,2019-11-14有两个


如何解决此问题?

此声明将为您提供请求期间每天新玩家的数量:

SELECT
DAY(p.`created`),
COUNT(DISTINCT(p.id)) as newPlayers
FROM `player` p 
WHERE p.`date` >= 'startDate' AND p.`date` < 'endDate' 
GROUP BY DAY(p.`created`);
选择
天(p.‘创建’),
将(不同的(p.id))计算为新玩家
从'player`p
其中p.`date`>='startDate'和p.`date`<'endDate'
按天分组(p.`created`);

我相信您需要:

SELECT COUNT(DISTINCT(p.id)) as players
       , SUM(case when  created >= startDate then 1 else 0 end) as newPlayers
FROM player p 
WHERE date_c >=  startDate
AND date_c < endDate
GROUP BY DAY(date_c);
选择COUNT(独立(p.id))作为玩家
,SUM(创建时的大小写>=开始日期,然后是1,否则为0结束)作为新玩家
来自玩家p
其中日期>=起始日期
和日期_c<结束日期
按天分组(日期c);
关于更多的细节,你需要给我们更多的细节。 请注意,我已将列date的名称更改为date_c。 干杯

为了回答第一条评论,如果没有单引号,您的查询也可以正常工作:

SELECT 
COUNT(DISTINCT(p.id)) as players, 
COUNT(DISTINCT(IF(created >= startDate, id, NULL))) as newPlayers 
FROM `player` p 
WHERE date_c >= startDate 
AND date_c < endDate 
GROUP BY DAY(p.date_c);
选择
将(不同的(p.id))计算为玩家,
作为新玩家计数(不同(如果(创建>=startDate,id,NULL)))
从'player`p
其中日期>=起始日期
和日期_c<结束日期
按天分组(p.date\u c);
这是你的电话号码。我知道演示中的数据不是很好,但是。。。 另外,请注意,我将
和date_c
更改为
和date_c=p.`startDate`,p.`id`,NULL)),作为新玩家
从'player`p
其中p.`date\u c`>=p.`startDate`和p.`date\u c`<`endDate`
按天分组(p.`date_c`);

参见:您能解释一下
IF
COUNT
的问题吗??
SELECT 
COUNT(DISTINCT(p.`id`)) as players, 
COUNT(DISTINCT(IF(p.`created` >= p.`startDate`, p.`id`, NULL))) as newPlayers 
FROM `player` p 
WHERE p.`date_c` >= p.`startDate` AND p.`date_c` < `endDate`
GROUP BY DAY(p.`date_c`);