2013-11-25 47 views
0

获取信息,我有两个表:采取列的每个最大值,而来自另一台

create table saller(
id_saller int IDENTITY PRIMARY KEY, 
name varchar(50), 
branch varchar(10) 
); 

create table sale(
id_sale int IDENTITY PRIMARY KEY, 
amount float, 
id_saller int, 
CONSTRAINT fk_saller FOREIGN KEY (id_saller)REFERENCES saller(id_saller) 
); 

我想获得每个分支 量的最大卖点价值,并得到的名称和ID saller负责对销量最大

我想这:

SELECT saller.name, saller.id_saller,maxv.branch, maxv.maxbranch 
FROM saller 
INNER JOIN sale 
ON saller.id_saller = sale.id_saller 
INNER JOIN (
    SELECT saller.branch,saller.id_saller,MAX(sale.amount) AS maxbranch 
    FROM saller 
    INNER JOIN sale 
     ON saller.id_saller = sale.id_saller 
    GROUP BY saller.branch,saller.id_saller 
) AS maxv ON(sale.id_saller = maxv.id_saller) 

回答

0

一种方式做到这一点,如果你想每个分支恰好返回一行,即使你有关系

SELECT branch, id_saller, name, amount 
    FROM 
(
    SELECT r.branch, s.id_saller, r.name, s.amount, 
     ROW_NUMBER() OVER (PARTITION BY r.branch ORDER BY s.amount DESC) rnum 
    FROM sale s JOIN saller r 
     ON s.id_saller = r.id_saller 
) q 
WHERE q.rnum = 1 

,或者如果你想联系的最高值

SELECT branch, id_saller, name, amount 
    FROM 
(
    SELECT r.branch, s.id_saller, r.name, s.amount, 
     RANK() OVER (PARTITION BY r.branch ORDER BY s.amount DESC) rank 
    FROM sale s JOIN saller r 
     ON s.id_saller = r.id_saller 
) q 
WHERE q.rank = 1 

这里是SQLFiddle演示

+0

是的,它帮助谢谢! :) –

0

根据你的问题,我不明白分支的存在,也许一个表,没有被提及。但要检索卖家ID和名称,您可以试试这个;

SELECT saller.name, saller.id_saller 
FROM saller 
INNER JOIN sale 
    ON saller.id_saller = sale.id_saller 
WHERE sale.Amount = (Select Max(Amount) from sale) 
相关问题