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

SQL统计支付应用好友最多成员的语法正确性校验咨询

SQL校验结果

原有SQL问题

你写的SQL存在2类核心问题,无法得到正确结果:

  • 语法风险:FROM、TO是SQL标准保留关键字,直接作为字段名使用在绝大多数数据库中会报语法错误,需要用对应数据库的转义符包裹(如MySQL用反引号、PostgreSQL用双引号)。
  • 业务逻辑错误:
    1. 分组维度不全:仅按收款方TO字段分组,所有从未收过款、仅转过账的用户根本不会进入统计范围,直接被漏掉。
    2. 统计计算无效:按TO分组后,同组内的TO值是固定的,COUNT(DISTINCT To)的结果永远是1,这部分计算完全没有意义,最终你实际只统计了每个收款方对接过多少个不同付款方,没有覆盖用户作为付款方对应的好友关系。
      拿你提供的样例数据举例:用户12给34、20、11三个用户转过账,且没有收到过任何人转账,按原有SQL逻辑,12根本不会出现在结果集里,统计完全失真。

正确实现思路与SQL

好友关系是双向的:不管A转钱给B还是B转钱给A,双方都存在好友关系。统计时需要先把所有交易对应的双向好友对全部拆解出来,再按用户分组去重统计好友总数,最后排序取好友数最高的用户即可。

WITH all_user_friends AS (
    -- 提取付款方视角的好友关系:付款方的好友是对应收款方
    SELECT `FROM` AS user_id, `TO` AS friend_id FROM sql_and_logic_pay_app_ds
    UNION
    -- 提取收款方视角的好友关系:收款方的好友是对应付款方
    SELECT `TO` AS user_id, `FROM` AS friend_id FROM sql_and_logic_pay_app_ds
)
SELECT
    user_id,
    COUNT(DISTINCT friend_id) AS total_friends
FROM all_user_friends
GROUP BY user_id
ORDER BY total_friends DESC
LIMIT 1;

注:UNION会自动对重复的关系对去重,无需额外加去重逻辑,即使用户和同一个好友有多笔转账记录,也只会统计为1个好友。

样例数据验证

用你提供的样例数据运行上述SQL,最终得到的结果是用户12共有3位好友,为好友数最多的会员,符合业务预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:00:57