我们可以使用不包含该列的列的顺序来编写oracle查询

时间:2015-03-20 09:27:49

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

我写了下面的查询。它没有给出任何输出

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

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

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

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;

答案 2 :(得分:0)

请从查询中删除“和”,

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