[英]How to join two tables with the same values but with different column names in pandas
[英]SQL join for two tables, with same column names on Python
已经有几个问题有同样的问题,我看了都一样,但仍然没有找到解决方案。 我想从两个表(具有相同名称(device_id)的列)合并并计数。
列名:事件和gender_age_train
import pandas as pd
from sqlalchemy import create_engine # database connection
db_engine = create_engine('sqlite:///devices-train.db')
join_devices = pd.read_sql_query('SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id', db_engine)
print join_devices
python的输出是:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) ambiguous column name: device_id [SQL: 'SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id']
如前所述,您需要完全限定device_id
列,因为它出现在两个表中。 值得注意的是,选择events.device_id
和gender_age_train.device_id
相等(根据join
条件)是一点点的。 选择其中之一就足够了:
SELECT e.device_id, COUNT(*)
FROM events e
JOIN gender_age_train g on e.device_id = g.device_id
GROUP BY e.device_id
当用于联接的列具有相同的名称时,可以使用USING子句 。 这不仅可以节省键入内容,还可以从联接输出中删除重复的列,以便您可以更轻松地引用它:
SELECT device_id, COUNT(*)
FROM events
JOIN gender_age_train USING (device_id)
GROUP BY device_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.