如何在 MySQL 中运行子查询,并仅从 Python 获得 year = 2020?
Posted
技术标签:
【中文标题】如何在 MySQL 中运行子查询,并仅从 Python 获得 year = 2020?【英文标题】:How can I run a Sub Query in MySQL, and get only year = 2020, from Python? 【发布时间】:2020-11-07 00:33:24 【问题描述】:我正在登录 mysql 数据库并运行以下代码行。
df = pd.read_sql("Select data_date, hr, group, eno, eut, car, freq, band, hq, From fsm WHERE IN (SELECT * FROM fsm WHERE year(data_date) = '2020')", st_connection)
我只想选择 2020 年的记录,所以我在这里使用子查询。在大约 1 亿条记录和 300 多列的情况下,该表非常庞大,因此我试图获取数据的一个子集。出了点问题,但我不知道出了什么问题。
【问题讨论】:
【参考方案1】:我只想选择 2020 年的记录,所以我在这里使用子查询。
我根本不明白 suqbuery 的意义所在。如果你想要 2020 年的记录,那么:
select ...
from fsm
where data_date >= '2020-01-01' and data_date < '2021-01-01'
请注意,这使用对列data_date
的直接过滤。这比在列上应用日期函数效率更高,如在您的原始谓词中:year(data_date) = 2020
,这需要在过滤发生之前将函数应用于整个数据集,并排除使用索引。
【讨论】:
"这比在列上应用日期函数效率更高,就像在您的原始谓词中一样:year(data_date) = 2020" 这是有道理的,很高兴知道。 @DavidErickson:是的......您可能想阅读 SARGable 谓词(搜索参数 Able)的上下文。 谢谢。从概念上讲,这可以完成工作:en.wikipedia.org/wiki/Sargable 这很好用。我在想一些更复杂的事情。感谢您帮助我重回正轨。以上是关于如何在 MySQL 中运行子查询,并仅从 Python 获得 year = 2020?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mysql PDO 选择查询中仅从时间戳中选择时间?