【问题标题】:SQL: highest order center for each customerSQL:每个客户的最高订单中心
【发布时间】:2014-12-11 02:38:56
【问题描述】:

我对 SQL 非常陌生(大约两个月后学习即用型职位),我正在尝试编写一个查询,该查询将为每个客户拉出主要订单中心(即,哪个中心是最受每个客户的青睐)。我只希望每位客户退货一次。

现在,我有一个查询返回最高订购客户和相关中心。它看起来像这样:

with x as (
select
row_number() over (order by cusid asc)
as row
,cusid
,centerid
,count(centerid) numofcenter
from orderdb
where isnumeric (cusid)=1
and estimate=0
group by centered, cusid
)
select row, centered, cusid, numofcenter
from x
where numofcenter=(
select max(numofcenter) from x)
order by cusid

任何帮助或指导将不胜感激。

【问题讨论】:

  • 如果您添加创建表定义和一些插入示例数据,您将获得快速答案。

标签: sql sql-server max with-statement


【解决方案1】:

未经测试,但这将是我所追求的基本概念:

WITH cte_centers AS
(SELECT DISTINCT cusid FROM orderdb)
SELECT cte_centers.cusid, x.numofcenter
FROM cte_centers 
CROSS APPLY
(SELECT TOP 1 
    count(centerid) numofcenter
 FROM orderdb
 WHERE isnumeric (cusid)=1
    AND estimate=0
    AND orderdb.cusid = cte_centers.cusid
 GROUP BY centered, cusid
 ORDER BY count(centerid) DESC
)x

【讨论】:

  • 我不知道交叉应用功能,但它是一个很棒的工具。非常感谢!
【解决方案2】:
WITH CTE
AS (
    SELECT
        RANK() OVER (PARTITION BY cusid ORDER BY COUNT(centerid) DESC) AS row,
        cusid,
        centerid,
        COUNT(centerid) numofcenter
    FROM
        orderdb
    WHERE
        ISNUMERIC(cusid) = 1
        AND estimate = 0
    GROUP BY
        cusid,
        centerid)
SELECT
    row,
    cusid,
    centerid,
    numofcenter
FROM
    CTE
WHERE
    row = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2013-11-22
    • 2011-05-02
    相关资源
    最近更新 更多