You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:不使用HAVING找出2022年至少捐款两次的捐赠者

解决方案:不使用HAVING子句找出2022年捐款≥2次的捐赠者

原表结构与数据

donorIdamountyear
7879.52022
5677.92021
787302022
4562.52022
567262022
456262022

方法1:子查询统计捐赠次数

先通过子查询统计2022年每个捐赠者的捐款次数,再在外层筛选次数达标的记录:

SELECT donorId
FROM (
    SELECT donorId, COUNT(*) AS donation_count
    FROM your_table_name
    WHERE year = 2022
    GROUP BY donorId
) AS donor_counts
WHERE donation_count >= 2;
  • 内层子查询仅处理2022年数据,按donorId分组后统计每组的捐款次数;
  • 外层直接通过WHERE筛选次数≥2的捐赠者,完全避开HAVING子句。

方法2:窗口函数标记重复记录

利用窗口函数计算每个捐赠者的总捐款次数,再筛选符合条件的记录并去重:

SELECT DISTINCT donorId
FROM (
    SELECT donorId, 
           COUNT(*) OVER(PARTITION BY donorId) AS total_donations
    FROM your_table_name
    WHERE year = 2022
) AS donor_donations
WHERE total_donations >= 2;

或者用行号窗口函数实现:

SELECT DISTINCT donorId
FROM (
    SELECT donorId,
           ROW_NUMBER() OVER(PARTITION BY donorId ORDER BY amount) AS row_num
    FROM your_table_name
    WHERE year = 2022
) AS donor_rows
WHERE row_num >= 2;
  • 窗口函数会为每条2022年的捐赠记录,计算出对应捐赠者的总捐款次数/行号;
  • 外层筛选后用DISTINCT去重,得到唯一的达标捐赠者ID。

内容的提问来源于stack exchange,提问作者Treadstone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:50:32