Mysql 计算有多少行具有相同的值,但如果ID不同,则将其分开计算

Mysql 计算有多少行具有相同的值,但如果ID不同,则将其分开计算,mysql,sql,database,Mysql,Sql,Database,我的问题是 Select r.coupon_id, c.who_added, c.coupon_name, r.when_added From redeemed_coupons r JOIN coupon c on r.coupon_id = c.coupon_id AND c.who_added = 1 AND r.when_added BETWEEN 1602827745 AND 1613084678 ORDER BY r.when_added 当添加时,如何获得具有相同值的行的

我的问题是

Select r.coupon_id,  c.who_added, c.coupon_name, r.when_added
From redeemed_coupons r 
JOIN coupon c on r.coupon_id = c.coupon_id AND c.who_added = 1 
AND r.when_added BETWEEN 1602827745 AND 1613084678 ORDER BY r.when_added 

当添加时,如何获得具有相同
值的行的计数,但如果
优惠券id不同,则即使添加时具有相同的

结果如下:

|coupon_id|who_added|coupon_name|when_added| total_count|
|---------|---------------------------------------------|
|    1    |    1    |Free Appe. |1602827745|      1     |
|    2    |    1    |Free Appe. |1602835586|      1     |
|    3    |    1    |10% off    |1603084636|      1     |
|    4    |    1    |50% off    |1603084678|      2     | 

是否只需要使用窗口函数进行计数

select r.coupon_id, c.who_added, c.coupon_name, r.when_added,
       count(*) over (partition by r.coupon_id, r.when_added) as cnt
from redeemed_coupons r join
     coupon c
     on r.coupon_id = c.coupon_id and
        c.who_added = 1 and
        r.when_added BETWEEN 1602827745 AND 1613084678
order by r.when_added ;
编辑:

在旧版本的MySQL中,可以使用相关子查询:

select r.coupon_id, c.who_added, c.coupon_name, r.when_added,
       (select count(*) 
        from redeemed_coupons r2 join
             coupon c2
             on r2.coupon_id = c2.coupon_id and
                c2.who_added = 1 and
                r2.when_added BETWEEN 1602827745 AND 1613084678
        where r2.when_added = r.when_added
      )
from redeemed_coupons r join
     coupon c
     on r.coupon_id = c.coupon_id and
        c.who_added = 1 and
        r.when_added BETWEEN 1602827745 AND 1613084678
order by r.when_added ;

请注意,这比使用窗口函数效率低得多。

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,将near'(当添加时按r分区)用作第行的赎回优惠券r连接优惠券c'中的cnt2@JeremyPaul . . . 这个查询需要MySQL 8.0,但我的活动实例是MySQL 8.0。21@JeremyPaul . . . 我没有看到语法中有明显的错误。@JeremyPaul。MySQL可能要求correlation子句位于
WHERE
子句中。这是我通常会说的,所以我更新了答案。请参阅: