Python数据帧到SQL查询

Python数据帧到SQL查询,python,sql,sql-server,pandas,Python,Sql,Sql Server,Pandas,我开发了一个Python脚本,读取一个CSV文件,该文件是SQL查询的结果,只是一个select*from表,我在该数据帧上执行一些转换和计算 我使用以下Python命令获取数据帧: result=csv_df.sort_values(by=['column1','column2','column3'],ascending=True) result=result.drop_duplicates(['column1','column2']) 现在,我需要使用SQL查询获得相同的表。我在T-SQL

我开发了一个Python脚本,读取一个CSV文件,该文件是SQL查询的结果,只是一个select*from表,我在该数据帧上执行一些转换和计算

我使用以下Python命令获取数据帧:

result=csv_df.sort_values(by=['column1','column2','column3'],ascending=True)
result=result.drop_duplicates(['column1','column2'])
现在,我需要使用SQL查询获得相同的表。我在T-SQL中尝试了以下几点,但都没有成功

select * from data
    where column1 IN
    (select distinct column1,column2 from data)
 and 
    where column2 IN
    (select distinct column1,column2 from data)
    order by column1,column2;
我不熟悉SQL语法,有人能帮我查询一下吗

我试图做的是从column1和column2的组合中删除所有重复的行

在Python中,我之所以包含column3,是因为它有需要丢弃的空值


在此之后,我是否应该创建一个视图以继续执行计算?

如果我正确理解了您的问题,您可以使用以下函数执行此操作:

with VirtTab as (
    select
      t.*,
      row_number()
        over(partition by column1, column2 order by column1, column2) as rn
    from data t
)
select * from VirtTab
where rn = 1
order by column1, column2;

据我所知,您需要按第1列、第2列和第3列排序的所有记录:

Select * from data order by column1,column2,column3
现在,除此之外,您还需要删除participantObjectId和slipObjectId列中的重复行。首先基于participantObjectId和slipObjectId对列进行分区。下面的查询包装在上述查询的顶部,并添加另一个字段id,该字段id为数据的每一行提供唯一的值

select *, ROW_NUMBER() OVER (PARTITION BY participantObjectId,slipObjectId order by column1,column2,column3) as id
from (select * from data order by column1,column2,column3)
在此基础上,我们添加了另一个select语句,并添加了一个条件,以仅选择id等于1的行

select * from
(select *, ROW_NUMBER() OVER (PARTITION BY participantObjectId,slipObjectId order by column1,column2,column3) as id from 
(Select * from data order by column1,column2,column3
)) where id=1;

在表中假设一个唯一ID,考虑使用匹配CulnN1和Cux2对的最低ID的记录:

从数据中选择*作为主 main.ID在哪里 从中选择sub.MinID 选择列1、列2、MinID作为MinID 从数据 按第1列分组,第2列作为子列 按main.column1、main.column2排序; 或者,使用JOIN:

从数据中选择main.*作为main 内连接 选择列1、列2、MinID作为MinID 从数据 按第1列分组,第2列作为子列 在main.ID=sub.MinID上 按main.column1、main.column2排序; 即使如此,仍然存在以下问题:

从数据中选择main.*作为main 哪里有 从中选择1 选择列1、列2、MinID作为MinID 从数据 按第1列分组,第2列分组 其中main.ID=sub.MinID 按main.column1、main.column2排序; 以及使用相关计数子查询的非窗口函数查询,以实现与MySQL、SQLite和MS Access的潜在兼容性。如果两列中的任何一列为空,则此版本将删除记录:

从中选择* 选择*, 从数据子菜单中选择计数*
WHERE sub.ID关键字“WHERE”附近的语法不正确。知道为什么吗?这就是我要找的。你能详细解释一下第一个答案背后的逻辑吗?你为什么用MinID?谢谢就像熊猫一样,drop_duplicates保留第一个默认值,然后删除匹配项。首先,这里是最小ID。您可以轻松更改为MaxID。