2012-05-23 3 views
0

Большая часть запроса была помещена в переменные, но для этого вопроса я включил их в запрос. Маржа - это сумма всех запросов псевдонима над ней ($ margin).Недопустимое использование групповой функции

Я получаю сообщение об ошибке:

SQLSTATE [HY000]: Общая ошибка: 1111 Неправильное использование групповой функции в компании-производительность control.php на линии 117

Вот мой запрос:

$margin = $invoicesOut.'-'.$costs.'+'.$creditsIn.'-'.$creditsOut ; 

$result = $dbh->query("SELECT CONCAT(MONTH(invoices_out.date), '/', YEAR(invoices_out.date)) AS theDate, 
          SUM(COALESCE(
          (SELECT SUM(invoices_out.net/rate) 
           FROM invoices_out, (SELECT jobRef, invoiceRef FROM invoices_out_reference GROUP BY invoiceRef) AS unique_references 
           WHERE unique_references.invoiceRef = invoices_out.id 
           AND unique_references.jobRef = jobs.id 
          ), 
         0)) AS invoiced, 
          SUM((SELECT SUM((quantity*parts_trading.sellingNet)/currencies.rateVsPound) 
       FROM parts_trading, currencies 
       WHERE parts_trading.sellingCurrency = currencies.id 
       AND parts_trading.enquiryRef = enquiries.id 
       AND jobs.id NOT IN 
        (SELECT DISTINCT jobRef FROM invoices_out_reference) 
      ) 
      + 
      COALESCE(
      (SELECT SUM(enquiries_custom_fees.feeAmountNet/currencies.rateVsPound) 
       FROM enquiries_custom_fees, parts_trading, currencies 
       WHERE enquiries_custom_fees.enquiryRef = enquiries.id 
       AND enquiries_custom_fees.enquiryRef = parts_trading.enquiryRef 
       AND parts_trading.sellingCurrency = currencies.id 
      ), 
      0 
      )) AS pending, 
          SUM(COALESCE(
       (SELECT SUM(net) 
       FROM credit_notes_supplier, parts_trading_buying 
       WHERE credit_notes_supplier.partRef = parts_trading_buying.id 
       AND parts_trading_buying.enquiryRef = enquiries.id) 
       ,0 
      )) AS creditsIn, 
          SUM(COALESCE(
       (SELECT SUM(net) 
       FROM credit_notes_customer, parts_trading 
       WHERE credit_notes_customer.partRef = parts_trading.id 
       AND parts_trading.enquiryRef = enquiries.id) 
       ,0 
       )) AS creditsOut, 
          SUM(((SELECT SUM(qty*(parts_trading_buying.buyingNet/currencies.rateVsPound)) 
       FROM parts_trading_buying, currencies 
       WHERE parts_trading_buying.buyingCurrency = currencies.id 
       AND parts_trading_buying.enquiryRef = enquiries.id 
     ) 
      + 
      COALESCE(
      (SELECT SUM(parts_trading_buying_charges.feeAmountNet) 
       FROM parts_trading_buying_charges, parts_trading_buying 
       WHERE parts_trading_buying_charges.partRef = parts_trading_buying.id 
       AND parts_trading_buying.enquiryRef = enquiries.id 
     ) 
      , 0))) AS costs, 
          SUM($margin) AS margin 
          FROM jobs, enquiries, invoices_out, 
          (SELECT jobRef, invoiceRef 
           FROM invoices_out_reference 
           GROUP BY invoiceRef 
          ) AS unique_invoice_refs 
          WHERE enquiries.id = jobs.enquiryRef 
          AND unique_invoice_refs.invoiceRef = invoices_out.id 
          AND jobs.id = unique_invoice_refs.jobRef 
          AND jobs.stateRef != 1 
          AND jobs.stateRef != 5 
          GROUP BY YEAR(invoices_out.date), MONTH(invoices_out.date)") ; 

Я свел к этим:

SUM($creditsIn) AS creditsIn 
SUM($creditsOut) AS creditsOut 

которые определяются как:

$creditsIn = 'COALESCE(
        (SELECT SUM(net) 
        FROM credit_notes_supplier, parts_trading_buying 
        WHERE credit_notes_supplier.partRef = parts_trading_buying.id 
        AND parts_trading_buying.enquiryRef = enquiries.id) 
        ,0 
       )' ; 

    $creditsOut = 'COALESCE(
        (SELECT SUM(net) 
        FROM credit_notes_customer, parts_trading 
        WHERE credit_notes_customer.partRef = parts_trading.id 
        AND parts_trading.enquiryRef = enquiries.id) 
        ,0 
        )' ; 
+1

Эй, можете ли вы отправить таблицу создания и вставить -задачи, я могу лучше попытаться помочь вам. Благодарю. – iiro

ответ

1

Какой большой вопрос!

Устранение неполадок. Просто удалите каждый подзапрос по одному и определите, какой запрос вызывает это.

Смежные вопросы