如何按当日分组统计行数?os_txn.pay_link表merchant_id统计
按当日统计各merchant_id的数据行数解决方案
要实现按当日统计每个merchant_id对应的数据行数,核心是结合筛选当日数据、分组merchant_id和COUNT(*)统计行数三个操作,以下是不同数据库环境下的可行SQL语句:
MySQL/MariaDB
SELECT merchant_id, COUNT(*) AS daily_count FROM os_txn.pay_link -- 替换create_time为表中实际存储交易时间的字段名 WHERE create_time >= CURDATE() AND create_time < DATE_ADD(CURDATE(), INTERVAL 1 DAY) GROUP BY merchant_id;
注:用范围查询而非
DATE(create_time) = CURDATE()是为了避免函数导致索引失效,提升查询性能;如果不需要考虑性能,也可以使用后者。
PostgreSQL
SELECT merchant_id, COUNT(*) AS daily_count FROM os_txn.pay_link -- 替换created_at为表中实际存储交易时间的字段名 WHERE created_at >= CURRENT_DATE AND created_at < CURRENT_DATE + INTERVAL '1 day' GROUP BY merchant_id;
SQL Server
SELECT merchant_id, COUNT(*) AS daily_count FROM os_txn.pay_link -- 替换created_time为表中实际存储交易时间的字段名 WHERE created_time >= CAST(GETDATE() AS DATE) AND created_time < DATEADD(DAY, 1, CAST(GETDATE() AS DATE)) GROUP BY merchant_id;
关键注意事项
- 必须将语句中的时间字段(如
create_time、created_at)替换为你表中实际记录交易时间的字段。 - 若需统计UTC时间的当日数据,需调整日期函数:比如MySQL用
UTC_DATE(),PostgreSQL用CURRENT_DATE AT TIME ZONE 'UTC'。 GROUP BY子句必须包含SELECT中除聚合函数(COUNT(*))外的所有字段,否则会触发语法错误,这是此类查询的常见问题点。
内容的提问来源于stack exchange,提问作者user19336013
相关产品推荐
相关产品推荐

