如何在 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 选择查询中仅从时间戳中选择时间?

Iphone 我们可以将耳机静音并仅从底部扬声器播放吗?

Mysql在where子句中优化子查询

如何在 Hive 中使用子查询

如何将 MySQL 子查询中的所有不同值选择到 group_concat 中?

如何优化 MySQL 中的 IN 子查询?