需要在SQL中的算术列上使用GROUPBY

需要在SQL中的算术列上使用GROUPBY,sql,oracle,group-by,Sql,Oracle,Group By,我想在下面的查询中使用Group by,但遇到一个错误,请任何人帮助我如何使用它 SELECT m.doc_date "Date of Purchase", t.cost_unit "Purchase On", t.price_unit "Sold On", t.price_unit - t.cost_unit "Margin", CONCAT ( ROUND ( ( (t.price_unit -

我想在下面的查询中使用Group by,但遇到一个错误,请任何人帮助我如何使用它

SELECT m.doc_date "Date of Purchase",
         t.cost_unit "Purchase On",
         t.price_unit "Sold On",
         t.price_unit - t.cost_unit "Margin",
         CONCAT (
            ROUND ( ( (t.price_unit - t.cost_unit) * 100 / (t.cost_unit + 1)),
                   2),
            '%')
            "Profit",
         med.medicine_name,
         med.manufacture,
         v.vendor_name
    FROM rrmaster m,
         rrtran t,
         medicine med,
         vendor v
   WHERE     m.doc_no = t.doc_no
         AND m.doc_type = t.doc_type
         AND m.storecode = t.storecode
         AND med.medicine_code = t.id_no
         AND m.doc_date LIKE '%17'
         AND m.source = v.code
GROUP BY med.medicine_name;
错误

ORA-00979:不是表达式的组 97900000-不是表达式的分组 *原因: *行动: 第1行第8列出错

问候
Soban

请尝试以下操作,使用时,所有非聚合列必须包含在GROUP BY子句中


您是按药物名称分组的,但选择了许多其他列,这些列不是聚合。那没有多大意义。很高兴编辑您的问题,添加一些示例数据,并解释您在此处尝试执行的操作。您通常按所选的列进行分组,但设置函数的参数除外。今天的提示:切换到现代的显式联接语法!更容易编写而不出错,更容易阅读和维护,并且在需要时更容易转换为外部连接。请参阅许多答案。Shi@TimBiegeleisen,感谢您的快速响应,我是编写复杂查询的新手,我想根据药物名称来提取数据,以便可以集中显示同名药物,你能帮我吗?我该怎么做?
SELECT doc_date "Date of Purchase",
       cost_unit "Purchase On",
       price_unit "Sold On",
       price_unit - cost_unit "Margin",
       profit,
       medicine_name,
       manufacture,
       vendor_name
  FROM (  SELECT m.doc_date,
                 t.cost_unit,
                 t.price_unit,
                 t.price_unit,
                 t.cost_unit,
                 CONCAT (
                    ROUND (
                       ( (t.price_unit - t.cost_unit) * 100 / (t.cost_unit + 1)),
                       2),
                    '%')
                    "Profit",
                 med.medicine_name,
                 med.manufacture,
                 v.vendor_name
            FROM rrmaster m,
                 rrtran t,
                 medicine med,
                 vendor v
           WHERE     m.doc_no = t.doc_no
                 AND m.doc_type = t.doc_type
                 AND m.storecode = t.storecode
                 AND med.medicine_code = t.id_no
                 AND m.doc_date LIKE '%17'
                 AND m.source = v.code
        GROUP BY m.doc_date,
                 t.cost_unit,
                 t.price_unit,
                 t.price_unit,
                 t.cost_unit,
                 med.medicine_name,
                 med.manufacture,
                 v.vendor_name)