哪个帐户名称包含最多订购商品?
这是我的代码:
eps
当我运行它时,它返回沃尔玛商店:2件物品,沃尔玛商店:4件物品,而不仅仅是说沃尔玛订购了这么多物品。如果我使用distinct,则返回错误。我不确定如何获取10月份订购金额的独特帐户名称。任何帮助将不胜感激。
编辑:我现在知道我应该使用ROW_NUMBER和分区来解决这个问题。但我无法正确理解语法。
答案 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...