【问题标题】:Need to use Group by in SQL on an Arithmetic column需要在算术列的 SQL 中使用 Group by
【发布时间】:2018-12-10 08:18:17
【问题描述】:

我想在 MEDICINE_NAME 列的下面查询中使用 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: 不是 GROUP BY 表达式 00979. 00000 - “不是 GROUP BY 表达式” *原因:
*行动: 行错误:1 列:8

问候 索班

【问题讨论】:

  • 您按药物名称分组,但选择了许多其他列,它们不是聚合。这没有多大意义。很高兴编辑您的问题,添加一些示例数据,并在此处解释您要执行的操作。
  • 您通常按您选择的列进行分组,除了那些作为设置函数的参数的列。
  • 今日提示:切换到现代、明确的JOIN 语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。
  • 更多答案请参见here
  • 嗨@TimBiegeleisen,感谢您的快速回复,我是编写复杂查询的新手,我想根据medicine_name 提取数据,以便可以集体显示同名药物,可以请帮帮我,我该怎么做?

标签: sql oracle group-by


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多