2017-07-17 35 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不適合與日期一起使用。
相關問題