Sql 他想换个专栏吗?我试图简单地获取从百分位方程返回的最大值,而不是返回最大值,我只获取每个项目的值,而不是最大百分比变化的三个项目的值。如果要返回前N,其中N>1(在您的情况下为前3)行,仅使用max()是不够的。您必须通过使用order by+rownum
Sql 他想换个专栏吗?我试图简单地获取从百分位方程返回的最大值,而不是返回最大值,我只获取每个项目的值,而不是最大百分比变化的三个项目的值。如果要返回前N,其中N>1(在您的情况下为前3)行,仅使用max()是不够的。您必须通过使用order by+rownum,sql,oracle,subquery,max,Sql,Oracle,Subquery,Max,他想换个专栏吗?我试图简单地获取从百分位方程返回的最大值,而不是返回最大值,我只获取每个项目的值,而不是最大百分比变化的三个项目的值。如果要返回前N,其中N>1(在您的情况下为前3)行,仅使用max()是不够的。您必须通过使用order by+rownum或使用分析窗口函数(如ROW\u NUMBER()、densite\u RANK()、RANK())来使用排名,或者通过使用与COUNT()相关的子查询来使用排名。因此,实际上没有一种方法可以动态地这样做,无论有多少个最大值,您都只能得到这些值
他想换个专栏吗?我试图简单地获取从百分位方程返回的最大值,而不是返回最大值,我只获取每个项目的值,而不是最大百分比变化的三个项目的值。如果要返回前N,其中N>1(在您的情况下为前3)行,仅使用
max()
是不够的。您必须通过使用order by+rownum或使用分析窗口函数(如ROW\u NUMBER()、densite\u RANK()、RANK()
)来使用排名,或者通过使用与COUNT()
相关的子查询来使用排名。因此,实际上没有一种方法可以动态地这样做,无论有多少个最大值,您都只能得到这些值?为什么?它完全是动态的。你只要告诉我你想在外部选择中获得多少顶级记录。人力资源部,我明白了,不管怎样,你的帮助会很好的,我很感激。谢谢。OP使用的是Oracle,不是MySQL抱歉我以为它在MySQL中:(OP使用的是Oracle,不是MySQL抱歉我以为它在MySQL中:(
SELECT grocery_item,
price_in_2012,
ESTIMATED_PRICE_IN_2042,
sum((ESTIMATED_PRICE_IN_2042 - PRICE_IN_2012) / PRICE_IN_2012) * 100 as Percent_Change
FROM grocery_prices
GROUP BY grocery_item,
price_in_2012,
ESTIMATED_PRICE_IN_2042
ORDER BY grocery_item;
select *
from im_employees a
where (select count(distinct employee_id ) from im_employees where employee_id>=a.employee_id)<=3;
select ROCERY_ITEM,PRICE_IN_2012,ESTIMATED_PRICE_IN_2042,round((cast(ESTIMATED_PRICE_IN_2042-PRICE_IN_2012 as numeric)/PRICE_IN_2012)*100,3)||'%' from GROCERY_PRICES order by round((cast(ESTIMATED_PRICE_IN_2042-PRICE_IN_2012 as numeric)/PRICE_IN_2012)*100,3) desc limit 3;
select rownum,ROCERY_ITEM,PRICE_IN_2012,ESTIMATED_PRICE_IN_2042,round(((ESTIMATED_PRICE_IN_2042-PRICE_IN_2012)/PRICE_IN_2012)*100,3)||'%' from GROCERY_PRICES where rownum < 4 order by round((cast(ESTIMATED_PRICE_IN_2042-PRICE_IN_2012 as numeric)/PRICE_IN_2012)*100,3) desc;
SELECT grocery_item, price_in_2012, estimated_price_in_2042, percent_change
FROM
(
SELECT grocery_item, price_in_2012, estimated_price_in_2042,
ROUND((estimated_price_in_2042 - price_in_2012) / price_in_2012 * 100, 2) AS percent_change,
ROW_NUMBER() OVER (ORDER BY ABS((estimated_price_in_2042 - price_in_2012) / price_in_2012 * 100) DESC) AS rank
FROM grocery_prices t
) q
WHERE rank <= 3;
| GROCERY_ITEM | PRICE_IN_2012 | ESTIMATED_PRICE_IN_2042 | PERCENT_CHANGE |
|--------------|---------------|-------------------------|----------------|
| B_001 | 0.8 | 3.28 | 310 |
| G_010 | 8 | 32.8 | 310 |
| R_003 | 4 | 16.4 | 310 |
SELECT grocery_item, price_in_2012, estimated_price_in_2042, percent_change
FROM
(
SELECT grocery_item, price_in_2012, estimated_price_in_2042,
ROUND((estimated_price_in_2042 - price_in_2012) / price_in_2012 * 100, 2) AS percent_change,
DENSE_RANK() OVER (ORDER BY ABS((estimated_price_in_2042 - price_in_2012) / price_in_2012 * 100) DESC) AS rank
FROM grocery_prices t
) q
WHERE rank <= 3;
| GROCERY_ITEM | PRICE_IN_2012 | ESTIMATED_PRICE_IN_2042 | PERCENT_CHANGE |
|--------------|---------------|-------------------------|----------------|
| B_001 | 0.8 | 3.28 | 310 |
| G_010 | 8 | 32.8 | 310 |
| R_003 | 4 | 16.4 | 310 |
| E_001 | 0.62 | 1.78 | 187.1 |
| B_002 | 2.72 | 7.36 | 170.59 |
SELECT GROCERY_ITEM,PRICE_IN_2012,ESTIMATED_PRICE_IN_2042,
ROUND(((`ESTIMATED_PRICE_IN_2042` - `PRICE_IN_2012`) / PRICE_IN_2012) * 100) AS Percent_Change
FROM grocery_prices AS itm
GROUP BY GROCERY_ITEM
ORDER BY Percent_Change DESC LIMIT 3