哪个帐户名称的订单最多? SQLDev

时间:2015-11-04 14:56:14

标签: sql oracle

哪个帐户名称包含最多订购商品?

这是我的代码:

eps

当我运行它时,它返回沃尔玛商店:2件物品,沃尔玛商店:4件物品,而不仅仅是说沃尔玛订购了这么多物品。如果我使用distinct,则返回错误。我不确定如何获取10月份订购金额的独特帐户名称。任何帮助将不胜感激。

编辑:我现在知道我应该使用ROW_NUMBER和分区来解决这个问题。但我无法正确理解语法。

1 个答案:

答案 0 :(得分:0)

您需要在查询中使用ROW_NUMBER

SELECT * FROM (

      select account_name, count(ordered_item), ROW_NUMBER() OVER (PARTITION BY account_name, ordered_item ORDER BY count(ordered_item) DESC) Row
      from oe_order_lines_all ool, cust_accounts_all hca, oe_order_headers_all ooh
      where to_date(ooh.creation_date) > '2015-10-01' and to_date(ooh.creation_date) < '2015-11-01'
      and ooh.flow_status_code <> 'CANCELLED'
      and ooh.sys_document_ref = ool.sys_document_ref
      and hca.cust_account_id=ooh.org_id
      group by hca.account_name, ool.ordered_item
      order by ool.ordered_item DESC

)data
where Row = 1

只是为了描述这里发生的事情:

ROW_NUMBER()是SQL中的一个函数,它允许你排名&#34;表的唯一分区中的每一行。 (一个分区是表中的行集合,它们对于特定列都具有相同的值。在下面的示例中,有两个基于account_name列的分区,一个用于ASDA,另一个用于{{1} })。

TESCO子句按指定的表达式(列)拆分行,例如这里我们用account_name分割行。

OVER (PARTITION BY...

注意+---------+--------------+------------+ | account | ordered_qty | ROW_NUMBER | +---------+--------------+------------+ | ASDA | 12 | 1 | | ASDA | 10 | 2 | | ASDA | 15 | 3 | | TESCO | 12 | 1 | | TESCO | 10 | 2 | | TESCO | 15 | 3 | +---------+--------------+------------+ 如何在ASDA值之后重置。

ROW_NUMBER子句然后说明如何在partiion中排序行,在我们的例子中,我们按ordered_qty降序排序,这给出了以下输出:

ORDER BY...