获取列的每个最大值并从另一个表中获取信息

时间:2013-11-25 07:51:00

标签: sql sql-server tsql

我有两张桌子:

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)
); 

我想获得每个分支的最大销售价值 并获得负责最畅销的卖方的名称和身份

我试过这个:

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)

2 个答案:

答案 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)

答案 1 :(得分: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 演示