[英]How to get the max() amount from a sum() subquery
My sub-query gets me the brand name and sum of the of the sales amount from 2013. My main query is trying to get the brand name and the highest sales amount from that year but this will return duplicate because the query will try to get the max(amount) for each brand name. 我的子查询为我提供了2013年以来的品牌名称和销售额的总和。我的主要查询是尝试获取该年的品牌名称和最高销售额,但这将返回重复值,因为查询将尝试获取每个品牌名称的最大值(金额)。 How do I filter it so it will just return the highest amount with only one brand name?
如何过滤它,使其仅返回一个品牌名称就返回最高金额? This is my query so far, any pointers would be helpful.
到目前为止,这是我的查询,任何指针都将有所帮助。 Thanks!
谢谢!
SELECT
maxamt.brnd_nm,
MAX(maxamt.amt) AS amt
FROM
(
SELECT
c.brnd_nm AS BRND_NM,
SUM(b.sales_amt) AS AMT
FROM prd.client A
INNER JOIN db1.table1 B
ON b.pty_key = a.pty_key
INNER JOIN db1.table2 c
ON b.d_key = c.d_key
INNER JOIN db1.table3 d
ON b.posat_key = d.posat_key
INNER JOIN db1.table4 e
ON b.frmly_key = e.frmly_key
WHERE B.date BETWEEN '2013-01-01'
AND '2013-12-31'
AND b.C_ID IN ( 'abc', 'def', 'wqs')
GROUP BY 1
) MaxAmt
GROUP BY 1
You don't need a subquery, just use ORDER BY
and LIMIT
: 您不需要子查询,只需使用
ORDER BY
和LIMIT
:
SELECT
c.brnd_nm AS BRND_NM,
SUM(b.sales_amt) AS AMT
FROM prd.client A
INNER JOIN db1.table1 B
ON b.pty_key = a.pty_key
INNER JOIN db1.table2 c
ON b.d_key = c.d_key
INNER JOIN db1.table3 d
ON b.posat_key = d.posat_key
INNER JOIN db1.table4 e
ON b.frmly_key = e.frmly_key
WHERE B.date BETWEEN '2013-01-01'
AND '2013-12-31'
AND b.C_ID IN ( 'abc', 'def', 'wqs')
GROUP BY BRND_NM
ORDER BY AMT DESC
LIMIT 1
Can't you use the TOP
operator?: 您不能使用
TOP
运算符吗:
SELECT TOP 1 *
FROM ( SELECT c.brnd_nm AS BRND_NM,
SUM(b.sales_amt) AS AMT
FROM prd.client A
INNER JOIN db1.table1 B
ON b.pty_key = a.pty_key
INNER JOIN db1.table2 c
ON b.d_key = c.d_key
INNER JOIN db1.table3 d
ON b.posat_key = d.posat_key
INNER JOIN db1.table4 e
ON b.frmly_key = e.frmly_key
WHERE B.date BETWEEN '2013-01-01'
AND '2013-12-31'
AND b.C_ID IN ( 'abc', 'def', 'wqs')
GROUP BY c.brnd_nm) MaxAmt
ORDER BY AMT DESC
You can use QUALIFY plus ROW_NUMBER: 您可以使用QUALIFY加ROW_NUMBER:
SELECT
c.brnd_nm AS BRND_NM,
SUM(b.sales_amt) AS AMT
FROM prd.client A
INNER JOIN db1.table1 B
ON b.pty_key = a.pty_key
INNER JOIN db1.table2 c
ON b.d_key = c.d_key
INNER JOIN db1.table3 d
ON b.posat_key = d.posat_key
INNER JOIN db1.table4 e
ON b.frmly_key = e.frmly_key
WHERE B.date BETWEEN '2013-01-01'
AND '2013-12-31'
AND b.C_ID IN ( 'abc', 'def', 'wqs')
GROUP BY 1
QUALIFY
ROW_NUMBER()
OVER (ORDER BY AMT DESC) = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.