当我在mysql编辑器上运行时,我有以下查询在jasper报告中使用它时出现“无效使用group by”的错误,它不会产生任何错误?查询有什么问题?
SELECT CUSTOMERS.TAXID,
CUSTOMERS.NAME AS CUSTOMER,
CATEGORIES.NAME AS CATEGORY,
PRODUCTS.REFERENCE,
PRODUCTS.NAME AS PRODUCT,
SUM(TICKETLINES.UNITS) AS UNIT,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) / SUM(TICKETLINES.UNITS) AS MEANPRICE,
PRODUCTS.PRICEBUY AS BUYPRICE,
((SUM(SUM(TICKETLINES.PRICE) / SUM(TICKETLINES.UNITS)) - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS) AS PROFITLOSS
FROM TICKETS
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID, TICKETLINES
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID
WHERE RECEIPTS.ID = TICKETS.ID AND
TICKETS.ID = TICKETLINES.TICKET AND
CATEGORIES.ID = PRODUCTS.CATEGORY
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID
ORDER BY CUSTOMERS.NAME,
CATEGORIES.NAME,
PRODUCTS.NAME
答案 0 :(得分:3)
这似乎是因为你在利润损失推导中在一笔总和中做了一笔金额; where
子句中还有一个复制join
条件的条件,另一个条件复制到其他地方没有提到的别名receipt
- 请尝试:
SELECT CUSTOMERS.TAXID,
CUSTOMERS.NAME AS CUSTOMER,
CATEGORIES.NAME AS CATEGORY,
PRODUCTS.REFERENCE,
PRODUCTS.NAME AS PRODUCT,
SUM(TICKETLINES.UNITS) AS UNIT,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) / SUM(TICKETLINES.UNITS) AS MEANPRICE,
PRODUCTS.PRICEBUY AS BUYPRICE,
SUM( (TICKETLINES.PRICE - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS ) AS PROFITLOSS
FROM TICKETS
JOIN TICKETLINES ON TICKETS.ID = TICKETLINES.TICKET
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID
ORDER BY CUSTOMERS.NAME, CATEGORIES.NAME, PRODUCTS.NAME
答案 1 :(得分:0)
您应该在SELECT组中包含所有组字段:
SELECT CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID,CUSTOMERS.TAXID,
CUSTOMERS.NAME AS CUSTOMER,
CATEGORIES.NAME AS CATEGORY,
PRODUCTS.REFERENCE,
PRODUCTS.NAME AS PRODUCT,
SUM(TICKETLINES.UNITS) AS UNIT,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL,
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) / SUM(TICKETLINES.UNITS) AS MEANPRICE,
PRODUCTS.PRICEBUY AS BUYPRICE,
((SUM(SUM(TICKETLINES.PRICE) / SUM(TICKETLINES.UNITS)) - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS) AS PROFITLOSS
FROM TICKETS
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID, TICKETLINES
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID
WHERE RECEIPTS.ID = TICKETS.ID AND
TICKETS.ID = TICKETLINES.TICKET AND
CATEGORIES.ID = PRODUCTS.CATEGORY
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID
ORDER BY CUSTOMERS.NAME,
CATEGORIES.NAME,
PRODUCTS.NAME