2017-07-17 36 views
-1

我恳请您对我的问题提出建议。我只是用查询下面我的脚本:MYSQL - 无效使用组功能错误代码:1111

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无效使用组功能。

有人可以帮我解决这个问题吗?这些查询使用表line_bgw.BGW_HIS_TB,其中列与DATE,MSISDN,CARRIER,PROD_ID一样。

谢谢。

回答

0

您不能在SUM参数中嵌套COUNT

取而代之的是:

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

务必:

COUNT(DISTINCT IF(CARRIER = '101' AND PROD_ID = 'ST', MSISDN, NULL)) 
+0

这个怎么样: –

+0

@ImamFauzi,我不知道你在问什么。 – trincot

0
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) 

你可以试试上面的查询。

希望这会帮助你。

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; 

注:

  • 我想你想COUNT(DISTINCT),而不是SUM()。这是一个猜测。
  • 我猜测,状态是一个数字而不是字符串。如果是这样,它应该与一个数字进行比较。因此101而不是'101'
  • 我简化了日期比较。一般来说,BETWEEN不适合与日期一起使用。
相关问题