需要将 SQL Query 转换为 Gorm 查询

Posted

技术标签:

【中文标题】需要将 SQL Query 转换为 Gorm 查询【英文标题】:Need to convert the SQL Query to Gorm query 【发布时间】:2021-12-17 15:33:56 【问题描述】:

我有这个 SQL 查询

Select CONCAT(kafka_user_stream.FirstName,' ', kafka_user_stream.LastName) AS "Full Name", 
kafka_user_stream.UID AS "User ID", 
kafka_user_stream.CountryCode AS "Country",
kafka_user_stream.CreatedAt AS "Registration Date & Time",
COUNT(jackpotmessage_stream.UID) AS "Win Count"
FROM kafka_user_stream LEFT JOIN 
jackpotmessage_stream ON jackpotmessage_stream.UID = kafka_user_stream.UID
WHERE "Type"='goldenTicketWin' 
GROUP BY "Full Name", "User ID", "Country", "Registration Date & Time"
ORDER BY "Win Count" DESC 

我想把它转换成 Gorm。我可以使用它

err = s.db.Exec("...QUERY")

但我无法从上述查询中提取数据。我需要提取上述所有字段(全名、用户 ID 等)并将它们存储在一个结构中。

在上述查询中,kafka_user_stream 和 jackpot_message 是从 kafka 流中提取的表。我正在使用 go-gorm 和 go。

我尝试了 Gorm 文档以及其他一些参考资料,但找不到任何解决方案。非常感谢任何线索、见解或帮助。

【问题讨论】:

【参考方案1】:

使用原生go/mysql 驱动程序,您应该使用Query()Scan() 方法从数据库中获取结果并将它们存储在结构中,而不是Exec()

在 GORM 中,您可以使用 SQL Builder 进行自定义查询:

type Result struct 
  ID   int
  Name string
  Age  int


var result Result
db.Raw("SELECT id, name, age FROM users WHERE name = ?", 3).Scan(&result)

【讨论】:

【参考方案2】:

按照 Aykut 的建议,我想出了一个稍微不同的方法,效果很好。

rows, _err := s.gdb.Raw(`Select CONCAT(kafka_user_stream.FirstName,' ', kafka_user_stream.LastName) AS "FullName", 
    kafka_user_stream.UID AS "UserID", 
    kafka_user_stream.CountryCode AS "Country",
    kafka_user_stream.CreatedAt AS "CreatedAt",
    COUNT(jackpotmessage_stream.UID) AS "WinCount"
    FROM kafka_user_stream LEFT JOIN 
    jackpotmessage_stream ON jackpotmessage_stream.UID = kafka_user_stream.UID
    WHERE "Type"='goldenTicketWin' 
    GROUP BY "FullName", "UserID", "Country", "CreatedAt"
    ORDER BY "WinCount" DESC;`).Rows()

【讨论】:

以上是关于需要将 SQL Query 转换为 Gorm 查询的主要内容,如果未能解决你的问题,请参考以下文章

无法将 MS Sql 查询转换为 Hibernate @Query

如何将此 SQL 转换为 Laravel Query Builder 查询?

如何将此类 sql 查询转换为 mongodb 查询

将 SQL 查询映射到 GORM 查询

试图找到将 SQL Query 转换为具有大量记录的 Pandas DataFrame 的最有效方法

谁能帮我将 Access Query 转换为 MS SQL Query