大家好,我是FinnStark,
我正在为projet开发SQL,我需要获取另一列的最小值,其中我有另一列的最小值。我得到的结果可行,但根本没有优化
这是我现在的sql请求:
const std::string &getName() const
{
return name;
}
但是我需要获取Col4的所有最小值,然后获取Col4的每个最小值的所有Col5最小值,然后获取Col5的每个最小值的所有Col6最小值,所以现在我有了这个:
SELECT
Col1,
Col2,
Col3,
MIN(Col4) AS "Col4",
MIN(Col5) AS "Col5",
MIN(Col6) AS "Col6"
FROM MyTable
GROUP BY
Col1,
Col2,
Col3
第二个请求的结果很好,但是根本没有优化。要获得500个结果需要花费超过1分钟的时间,而我至少有一百万行。
能否请您告诉我是否有更好的方法?
此致, FinnStark
答案 0 :(得分:0)
我不确定我是否理解正确,但是请尝试以下方法:
SELECT col1,
col2,
col3,
col4,
col5,
MIN(col6) as "col6"
FROM (
SELECT col1,
col2,
col3,
col4,
MIN(col5) AS "col5",
col6
FROM (SELECT Col1,
Col2,
Col3,
MIN(Col4) AS "Col4",
Col5,
Col6
FROM MyTable
GROUP BY Col1,
Col2,
Col3,
Col5,
Col6)
GROUP BY col1,
col2,
col3,
col4,
col6
)
GROUP BY col1,
col2,
col3,
col4,
col5
答案 1 :(得分:0)
如果我理解正确,则可以使用窗口功能:
SELECT Col1, Col2, Col3, Col4, Col5, Col6
FROM (SELECT t.*,
MIN(col4) OVER (PARTITION BY col1, col2, col3) as min_col4,
MIN(col5) OVER (PARTITION BY col1, col2, col3, col4) as min_col5,
MIN(col6) OVER (PARTITION BY col1, col2, col3, col4, col5) as min_col6
FROM MyTable t
) t
WHERE col4 = min_col4 AND
col5 = min_col5 AND
col6 = min_col6
答案 2 :(得分:0)
使用row_number()函数。
import os
import requests
from bs4 import BeautifulSoup
desktop = os.path.expanduser("~/Desktop")
url = 'https://www.ici.org/research/stats'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
excel_files = soup.select('a[href*=xls]')
for each in excel_files:
if 'Supplement: Worldwide Public Tables' in each.text:
link = 'https://www.ici.org' + each['href']
filename = each['href'].split('/')[-1]
if os.path.isfile(desktop + '/' + filename):
print ('*** File already exists: %s ***' %filename)
continue
resp = requests.get(link)
output = open(desktop + '/' + filename, 'wb')
output.write(resp.content)
output.close()
print ('Saved: %s' %filename)