0

次のクエリがあります。

INSERT INTO StatisticalConsultationAgreement VALUES (
   queryType, entityCode, entityType, queryClass,queryTables,period, 
   COUNT(queryClass),  SUM(numberRecords),  SUM(recordsFound),
   SUM(NorecordsFound), NOW(), 'system');
SELECT
   MONTH(EndDateTimeProcessing),YEAR(EndDateTimeProcessing),
   entityType,
   entityCode,
   queryType,
   queryClass,
   EndDateTimeProcessing as period
FROM agreementFile
WHERE 
  MONTH(EndDateTimeProcessing)=MONTH(DATE_SUB( CURDATE(), INTERVAL 1 MONTH )) 
  AND YEAR(EndDateTimeProcessing)=YEAR(CURDATE())
GROUP BY entityType,entitycode,queryType, queryClass;

クエリを実行すると、次の間違いが発生します。

Error code 1111, SQL state HY000: Invalid use of group function
Line 1, column 1

Executed successfully in 0,002 s.
Line 5, column 2

なぜこれが起こるのですか?

それを修正する方法は?

4

2 に答える 2

0

グループ化EndDateTimeProcessingしていないため、挿入を実行しようとするとEndDateTimeProcessing、グループ化された行からどの値を取得する必要があるかを判断できません。解決策は、グループ句に追加することです。

 GROUP BY entityType,entitycode,queryType, queryClass, EndDateTimeProcessing;

または、関数グループを MAX()、MIN() などとして使用します。

よろしくお願いします

編集

ゴードン・リノフが言ったように、クエリとINSERTを混在させているため、すべてがクエリによって取得されるはずです。

正しい構文は次のとおりです。

INSERT INTO StatisticalConsultationAgreement
SELECT
   'queryType', --I don't know what is the query type so i put it on single quote
   entityCode,
   entityType,
   queryClass,
   queryTables,
   MAX(EndDateTimeProcessing), --Period put on group function MAX, but it cant be grouped below or put into another group function
   COUNT(queryClass),  --
   SUM(numberRecords), --  ASUMING THOSE ARE COLUMNS IN  agreementFile
   SUM(recordsFound),  --
   SUM(NorecordsFound),-- 
   NOW(),
   'system'
FROM agreementFile
WHERE 
  MONTH(EndDateTimeProcessing)=MONTH(DATE_SUB( CURDATE(), INTERVAL 1 MONTH )) 
  AND YEAR(EndDateTimeProcessing)=YEAR(CURDATE())
GROUP BY entityType,entitycode,queryType, queryClass;

MONTH(EndDateTimeProcessing),YEAR(EndDateTimeProcessing),あなたがどこにいるべきかわからなかったので、クエリのフィールドは削除されました

于 2013-08-24T17:43:18.090 に答える
0

valuesステートメントと のselectステートメントを混在させていinsertます。あなただけが必要selectです。これはあなたが望むものについての私の最善の推測です:

INSERT INTO StatisticalConsultationAgreement 
    SELECT queryType, entityCode, entityType, queryClass,queryTables,period, 
           COUNT(queryClass),  SUM(numberRecords),  SUM(recordsFound),
           SUM(NorecordsFound), NOW(), 'system'
    FROM agreementFile
    WHERE MONTH(EndDateTimeProcessing)=MONTH(DATE_SUB( CURDATE(), INTERVAL 1 MONTH )) AND
          YEAR(EndDateTimeProcessing)=YEAR(CURDATE())
    GROUP BY entityType, entitycode, queryType, queryClass;

StatisticalConsultationAgreementただし、insertステートメントには列名もリストする必要があります。

于 2013-08-24T17:58:15.670 に答える