每个地点最常订购什么包裹?

What package is ordered most often at each location?

我一直无法找到这个问题的结果。

以下是我的 table 结构详细信息:

studios
    (
    studio_id,
    location
    )

photo_sessions
    (
    session_id,
    studio_id,
    cust_id,
    session_length,
    session_date
    )

customer
    (
    cust_id,
    cus_first,
    cus_last,
    emailid
    )

order
    (
    order_id,
    cust_id,
    order_description,
    amount
    )

package_order
    (
    package_order_id,
    order_id,
    package_id,
    price,
    quantity
    )

package
    (
    package_id,
    package_name
    )

我想找出每个地点最常订购的包裹。

我试过这个查询,

SELECT
    p.package_name,
    s.location,
    count(p.package_id) 
FROM package p,
    package_order po,
    order_table o,
    customer c,
    photo_sessions ps,
    studios s
WHERE p.package_id=po.package_id
    and po.order_id=o.order_id
    and o.cust_id=c.cust_id
    and c.cust_id=ps.cust_id
    and ps.studio_id=s.studio_id
GROUP BY p.package_name,
    s.location  
HAVING COUNT (p.package_id)=
     ( 
     SELECT MAX(mycount)   
     FROM  (   
            SELECT package_id, COUNT(package_id) as mycount   
            FROM package_order   
            GROUP BY package_id
            ) as most_order
    );  

我不确定它给出的结果是否正确。任何帮助将不胜感激。

您可以使用 window 函数执行此操作:

WITH cte as (
    SELECT
    p.package_name,
    s.location,
    count(p.package_id) AS mycount,
    row_number() over(partition by s.location order by count(p.package_id) desc) AS rn
FROM package p
     JOIN package_order po ON p.package_id = po.package_id
     JOIN order_table o ON po.order_id = o.order_id
     JOIN customer c ON o.cust_id = c.cust_id
     JOIN photo_sessions ps ON c.cust_id = ps.cust_id
     JOIN studios s ON ps.studio_id = s.studio_id
GROUP BY p.package_name,
         s.location)
SELECT * FROM cte 
WHERE rn = 1

PS:您使用 Sql Server 2012,但加入了旧式已弃用的语法。是时候忘掉旧的了。

编辑:

WITH cte as (
    SELECT
    p.package_name,
    s.location,
    count(p.package_id) AS mycount
FROM package p
     JOIN package_order po ON p.package_id = po.package_id
     JOIN order_table o ON po.order_id = o.order_id
     JOIN customer c ON o.cust_id = c.cust_id
     JOIN photo_sessions ps ON c.cust_id = ps.cust_id
     JOIN studios s ON ps.studio_id = s.studio_id
GROUP BY p.package_name,
         s.location)
SELECT * FROM cte c1
CROSS APPLY(SELECT MAX(mycount) mycount FROM cte c2 WHERE c1.location = c2.location) ca
WHERE c1.mycount = ca.mycount