MySQL错误“组函数使用无效错误代码:1111”

MySQL错误“组函数使用无效错误代码:1111”,mysql,sql,Mysql,Sql,我只是在下面使用我的脚本进行查询: SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') DT2, SUM(IF(CARRIER = '101' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "TSEL ST", SUM(IF(CARRIER = '103' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "XL ST", SUM(IF(CARRIER = '104' AND

我只是在下面使用我的脚本进行查询:

SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') DT2,
SUM(IF(CARRIER = '101' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "TSEL ST",
SUM(IF(CARRIER = '103' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "XL ST",
SUM(IF(CARRIER = '104' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "ISAT ST",
SUM(IF(CARRIER = '106' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "H3I ST",
SUM(IF(CARRIER = '105' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "SF ST",
SUM(IF(CARRIER = '101' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "TSEL CN",
SUM(IF(CARRIER = '103' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "XL CN",
SUM(IF(CARRIER = '104' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "ISAT CN",
SUM(IF(CARRIER = '106' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "H3I CN",
SUM(IF(CARRIER = '105' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "SF CN",
SUM(IF(CARRIER = '101' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "TSEL DG",
SUM(IF(CARRIER = '103' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "XL DG",
SUM(IF(CARRIER = '104' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "ISAT DG",
SUM(IF(CARRIER = '106' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "H3I DG",
SUM(IF(CARRIER = '105' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "SF DG",
SUM(IF(CARRIER = '101' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "TSEL GM",
SUM(IF(CARRIER = '103' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "XL GM",
SUM(IF(CARRIER = '104' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "ISAT GM",
SUM(IF(CARRIER = '106' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "H3I GM",
SUM(IF(CARRIER = '105' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "SF GM"
 FROM BGW_HIS_TB
WHERE REG_DT BETWEEN '2017-07-01 00:00:00' AND '2017-07-31 23:59:59'
  AND STATUS = 'S'
GROUP BY DATE_FORMAT(REG_DT, '%Y-%m-%d') ORDER BY 1 ASC;
当我尝试运行时,它出现错误:

错误代码1111。组函数的使用无效

这些查询使用的是表行\u bgw.bgw\u HIS\u TB,它的列与DATE、MSISDN、CARRIER、PROD\u ID一样。

不能在SUM参数中嵌套计数

与此相反:

SUM(IF(CARRIER = '101' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0))
做:


您可以尝试上述查询。

我怀疑您想要:

SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') as DT2,
       COUNT(DISTINCT CASE WHEN CARRIER = 101 AND PROD_ID = 'ST' THEN MSISDN) as "TSEL ST",
       . . .
FROM BGW_HIS_TB
WHERE REG_DT >= '2017-07-01' AND
      REG_DT < '2017-08-01' AND
      STATUS = 'S'
GROUP BY DT2
ORDER BY DT2;
注:

我想你要的是计数,而不是求和。这是一个猜测。 我猜状态是一个数字而不是字符串。如果是,则应将其与一个数字进行比较。因此是101而不是“101”。 我简化了日期比较。一般来说,在日期中使用BETWEEN是不明智的。
伊玛目,以下任何一个答案都可以接受吗?接受或投票不是强制性的,但对帮助过你的人肯定是很好的。
SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') DT2,
SUM(CASE WHEN CARRIER = '101' AND PROD_ID = 'ST' THEN 1 ELSE 0 END )'TSEL ST',
SUM(CASE WHEN CARRIER = '103' AND PROD_ID = 'ST' THEN 1 ELSE 0 END )'XL ST'
 FROM BGW_HIS_TB
WHERE REG_DT BETWEEN '2017-07-01 00:00:00' AND '2017-07-31 23:59:59'
   AND STATUS = 'S'
GROUP BY DATE_FORMAT(REG_DT, '%Y-%m-%d') ORDER BY 1 ASC;
create table BGW_HIS_TB (CARRIER varchar(255),PROD_ID varchar(255),MSISDN varchar(255),REG_DT date)
SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') as DT2,
       COUNT(DISTINCT CASE WHEN CARRIER = 101 AND PROD_ID = 'ST' THEN MSISDN) as "TSEL ST",
       . . .
FROM BGW_HIS_TB
WHERE REG_DT >= '2017-07-01' AND
      REG_DT < '2017-08-01' AND
      STATUS = 'S'
GROUP BY DT2
ORDER BY DT2;