cx15151495250 2014-09-23 07:52 采纳率: 0%
浏览 1683

这个语句应该怎么修改?

SELECT BDM_UserID, CRM_CustomerRegisterDate,MIN(DATE_FORMAT(BDM_ListenStartTime,"%Y_%m_%d")),MIN(DATE_FORMAT(BDM_ListenEndTime,"%Y_%m_%d")),SUM(BDM_ListenTimeLength)
FROM ETCRM.CRM_CustomerInfo o INNER JOIN ETBDM.BDM_UserInfo p ON o.BDM_UserName=p.BDM_UserName
INNER JOIN ETBDM.BDM_UserListenRec q ON p.BDM_UIID =q.BDM_UserID
WHERE (CRM_CustomerRegisterDate >='2013-01-01' AND CRM_CustomerRegisterDate<'2014-01-01') AND (BDM_ListenStartTime>='2013-01-01' AND BDM_ListenStartTime<'2014-01-01')
AND BDM_UserID !='' AND BDM_UserID='9741708'
GROUP BY BDM_UserID,MIN(DATE_FORMAT(BDM_ListenStartTime,"%Y_%m_%d"))

结果显示“Invalid use of group function”,不知道问题出在哪

  • 写回答

1条回答 默认 最新

  • 雪豹同志 2025-09-14 09:44
    关注

    出现 “Invalid use of group function” 错误,是因为在  GROUP BY  子句中使用了聚合函数  MIN() ,这不符合 SQL 语法规则( GROUP BY  子句中应使用普通列,聚合函数需在  SELECT  或  HAVING  子句中使用)。以下是修改后的 SQL 语句:

    sql

      
    SELECT BDM_UserID,
           CRM_CustomerRegisterDate,
           MIN(DATE_FORMAT(BDM_ListenStartTime, '%Y_%m_%d')) AS min_listen_date
    FROM ETCRM.CRM_CustomerInfo o
    INNER JOIN ETBDM.BDM_UserInfo p ON o.BDM_UserName = p.BDM_UserName
    INNER JOIN ETBDM.BDM_UserListenRec q ON p.BDM_UIID = q.BDM_UserID
    WHERE (CRM_CustomerRegisterDate >= '2013-01-01' AND CRM_CustomerRegisterDate < '2014-01-01')
      AND (BDM_ListenStartTime >= '2013-01-01' AND BDM_ListenStartTime < '2014-01-01')
      AND BDM_UserID != ''
      AND BDM_UserID = '9741708'
    GROUP BY BDM_UserID, CRM_CustomerRegisterDate;
    
    

    修改点说明

    • 给  MIN(DATE_FORMAT(BDM_ListenStartTime, '%Y_%m_%d'))  起别名  min_listen_date ,方便后续引用(若有需要)。
    •  GROUP BY  子句中使用普通列  BDM_UserID  和  CRM_CustomerRegisterDate ,符合 SQL 语法中  GROUP BY  需与  SELECT  中非聚合列对应(或可推导)的规则。
    评论

报告相同问题?