这是我的查询
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
如何获取具有相同值when_added
的行的计数,但是如果coupon_id
不同,则即使您具有相同的when_added
结果如下:
|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 |
答案 0 :(得分: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 ;
请注意,这比使用窗口函数的效率低得多。