我在使用SQL查询时遇到了困难 . 这是一个问题:
- 对于每张发票,显示发票中购买的所有产品的发票编号,发票日期和总金额,按发票编号按降序排列,然后按发票日期按升序排序 .
我正在尝试使用SUM函数在两个表,INVOICE和LINE之间进行GROUP BY . 这是我到目前为止:
SELECT INV_NUMBER, INV_DATE, SUM(LINE_PRICE) AS TOTAL_PRICE
FROM LINE, INVOICE
GROUP BY INV_NUMBER
ORDER BY INV_NUMBER DESC;
INV_NUM在LINE和INVOICE表中 . 所以我也尝试这样做,没有运气:
SELECT INVOICE.INV_NUMBER, INV_DATE, SUM(LINE_PRICE) AS TOTAL_PRICE
FROM LINE, INVOICE
GROUP BY INVOICE.INV_NUMBER
ORDER BY INVOICE.INV_NUMBER DESC;
我一直收到错误说:
命令行出错:1列:28错误报告 - SQL错误:ORA-00979:不是GROUP BY表达式00979. 00000 - "not a GROUP BY expression" *原因:
*行动:
我究竟做错了什么?谢谢!
乔恩
3 回答
实际上你会得到笛卡尔结果,因为表之间没有连接条件 . 接下来,GROUP BY应该是所有不属于任何聚合的列(sum,count,min,max,avg等) . 因此,您必须按发票编号和Julian建议的日期进行分组 . 现在说,是的,发票编号应该是唯一的并且在一个日期,因此如果按发票和额外日期字段进行分组,则无论细节级别的行项目如何,日期都是相同的 . 这就是说...尝试以下,我猜测基于连接列,但你可以调整它
如果禁用ONLY_FULL_GROUP_BY,这适用于MySQL / MariaDB . 否则使用以下其中一个:
这是答案;我的一个朋友能够帮忙,虽然我仍然不确定为什么我在做什么不起作用:
非常感谢那些试图帮助我的人 . 对此,我真的非常感激!
乔恩