我妈妈想为我兄弟的婴儿洗澡准备一个婴儿名字游戏。想学python,就自告奋勇。我几乎有 python 位,这是抛出我的 SQL。
游戏应该运行的方式是淋浴的每个人都在纸上写下名字,我手动将它们输入 Excel(尽可能规范拼写)并导出到 MS Access。然后我运行我的 python 程序来查找具有最流行名称的播放器和具有最独特名称的播放器。名为“babynames”的数据库只有四列。
ID | BabyFirstName | BabyMiddleName | PlayerName
---|---------------|----------------|-----------
我妈妈经常改变一些东西,但就他们现在的情况而言,我必须弄清楚:
a) 所有名字和中间名中最流行的名字(或名字,如果有平局的话)
b) 所有名字和中间名中最独特的名字(或名字,如果有平局的话)
c) 拥有最多热门名字的玩家(赢得奖品)
d) 拥有最多唯一名称的玩家(赢得奖品)
我已经为此工作了大约一个星期,甚至无法获得 a) 和 b) 的 SQL 查询,更不用说 c) 和 d)。我不只是有点沮丧。
顺便说一句,我只看名字的拼写,而不是语音。当我手动输入名称时,我会将“Kris”等名称更改为“Chris”,将“Xtina”更改为“Christina”等。
编辑以添加我尝试过的几个最新查询 a)
SELECT [BabyFirstName],
COUNT ([BabyFirstName]) AS 'FirstNameOccurrence'
FROM [babynames]
GROUP BY [BabyFirstName]
ORDER BY 'FirstNameOccurrence' DESC
LIMIT 1
和
SELECT [BabyFirstName]
FROM [babynames]
GROUP BY [BabyFirstName]
HAVING COUNT(*) =
(SELECT COUNT(*)
FROM [babynames]
GROUP BY [BabyFirstName]
ORDER BY COUNT(*) DESC
LIMIT 1)
这些都会导致语法错误。
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in ORDER BY clause. (-3508) (SQLExecDirectW)')
我试过使用 [FirstNameOccurrence] 和 FirstNameOccurrence 以及同样的错误。不知道为什么它不能通过该列名来识别它来排序。
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error. in query expression 'COUNT(*) = (SELECT COUNT(*) FROM [babynames] GROUP BY [BabyFirstName] ORDER BY COUNT(*) DESC LIMIT 1)'. (-3100) (SQLExecDirectW)")
我承认我并没有真正理解这里的所有 COUNT(*) 命令,但这是 stackoverflow 中类似问题的解决方案,我想当我的其他想法没有成功时我会尝试。