【发布时间】:2020-12-16 05:38:54
【问题描述】:
所以,我有四个重要字段:RIVER_ID、Feature_ID、Name 和 Name count。 RIVER_ID 代表一条河流,它通常包含几个具有独特 Feature_IDs 的特征。假设河流 Danube 有 12 的 RIVER_ID,并且有 20 个特征,它们的 Feature_IDs 不同。这些特征中有 10 已命名,10 未命名,还有十个已命名特征中的 1 命名为 Sava,其余为命名Danube 而其余的是 NULL 值。我想将基于RIVER_ID 的特定ID 最常出现的名称混为一谈。我创建了一个简单的查询,它选择唯一命名的,但并不真正知道如何将这些值与 NULL 合并。
SELECT RIVER_ID, Name,
Feature_ID, Name count
FROM river_names
WHERE Name! = 'NULL'
GROUP BY RIVER_ID, Name count
ORDER BY RIVER_ID, Name count;
我正在使用import sqlite3 执行此操作,并在Python3 中创建连接。我也尝试过使用.CSV 并循环遍历它,但我认为sqlite3 应该是一个更简单的解决方案。
import sqlite3
conn = sqlite3.connect('multiple_names.sqlite')
c = conn.cursor()
# print(c.execute("SELECT RIVER_ID, value, Name count FROM river_names WHERE value != 'NULL' GROUP BY RIVER_ID, Name count ORDER BY RIVER_ID, Name count DESC"))
red = []
for row in c.execute("SELECT RIVER_ID, value, Name count FROM river_names WHERE value IS NOT 'NULL' GROUP BY RIVER_ID, Name count ORDER BY RIVER_ID, Name count DESC"):
print(row)
red.append(row)
这就是我目前所拥有的,它会打印出(RIVER_ID、Name、Name Count)的列表。我想比较具有相同 RIVER_ID 和不同名称的功能,并将出现最多的名称附加到具有相同 RIVER_ID 的所有功能,包括没有名称的功能。
【问题讨论】:
-
如果有帮助,您可以使用
COALESCE(Name, '<unnamed>')替换(例如)<unnamed>为 NULL 值。 -
另外,如果该列确实命名为
"Name count",则需要在SQL 查询中引用它。
标签: python sql python-3.x list sqlite