【问题标题】:Can we write a oracle query using order by of a column without group by of that column我们可以使用列的 order by 编写一个 oracle 查询,而没有该列的 group by
【发布时间】:2015-05-23 16:04:35
【问题描述】:

我已经编写了以下查询。它没有给出任何输出

select mfg_name, wm_concat(cal_wid||','||mkt_share) concated_mkt_share from shares group by mfg_name order by cal_wid

当我使用下面的代码时,当我将cal_wid 包含在group by 中时,它运行良好

select mfg_name, wm_concat(cal_wid||','||mkt_share) concated_mkt_share from shares group by mfg_name, **cal_wid** order by cal_wid

我正在使用 jquery 将这些值附加到某些应用程序。第二个查询的输出不支持我的应用程序。 I am trying to use the first query but with order by of cal_wid. So can I use the cal_wid without using it in group_by

【问题讨论】:

  • 它正在输出 - 它报告一个错误。您看不到错误意味着您的代码在其他地方存在缺陷。

标签: mysql oracle group-by sql-order-by concat


【解决方案1】:

这是您的查询:

select mfg_name, wm_concat(cal_wid || ',' || mkt_share) as concated_mkt_share
from shares
group by mfg_name
order by cal_wid;

您不能按cal_wid 排序,因为结果集中的每一行都有多个cal_wid。 Oracle 不知道您想要订购哪个值。

您可以按聚合函数排序,例如min()max()sum()

order by min(cal_id)

【讨论】:

  • 没有变化。我得到了同样的结果
【解决方案2】:

当只从一个或多个表中选择字段时,任何字段,无论您是否在选择列表中,都可以用于排序。

但是,当您对结果集进行分组时,您将不再有其他可用字段。现在,您不仅要处理行,还要处理行组,并且每个组内的任何字段都只能作为聚合的结果从组中传递出去。

这意味着只能对分组字段或聚合结果进行排序。您的查询有一个分组字段和一个聚合结果。所以只有四个排序选项可用:

select  mfg_name, wm_concat(cal_wid||','||mkt_share) concated_mkt_share
from    shares
group by mfg_name
order by mfg_name;

order by wm_concat(cal_wid||','||mkt_share);

order by mfg_name, wm_concat(cal_wid||','||mkt_share);

order by wm_concat(cal_wid||','||mkt_share), mfg_name;

【讨论】:

    【解决方案3】:

    请从您的查询中删除“和”,

    select mfg_name, wm_concat(cal_wid||','||mkt_share) concated_mkt_share from shares group by mfg_name order by cal_wid
    

    这给出了输出,

    select crm_campaign_id, concat(end||','|title) from events 
    group by crm_campaign_id  order by end
    

    【讨论】:

    • 这里输入错误。这实际上不是错误
    猜你喜欢
    • 2017-07-13
    • 2011-08-14
    • 2012-03-04
    • 1970-01-01
    • 2019-01-21
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多