【问题标题】:'SUM()' in output map using SQL (Grails)使用 SQL (Grails) 输出映射中的“SUM()”
【发布时间】:2017-05-06 12:29:34
【问题描述】:

在我的 MySQL Workbench 中,以下查询完美运行:

SELECT card.number, SUM(qty)
FROM card_set, card, user_card
WHERE card_set.id = card.card_set_id
AND user_card.card_id = card.id
AND card_set.id = 1
GROUP BY card.number ORDER BY card.number;

但是,在我的 Grails 控制器中,我有以下内容:

SELECT card.number, SUM(qty)" +
"FROM card_set, card, user_card\n" +
"WHERE card_set.id = card.card_set_id\n" +
"AND user_card.card_id = card.id\n" +
"AND card_set.id = 1\n" +
"GROUP BY card.number ORDER BY card.number;"

输出是这样的:

[['number':1, 'SUM(qty)':2], ['number':2, 'SUM(qty)':3], ['number':3, 
'SUM(qty)':0], ['number':4, 'SUM(qty)':0], ['number':5, 'SUM(qty)':-2], 
['number':6, 'SUM(qty)':0], ['number':7, 'SUM(qty)':2], ['number':8, 
'SUM(qty)':2], ['number':9, 'SUM(qty)':0], ['number':10, 'SUM(qty)':0], 
['number':11, 'SUM(qty)':1], ['number':12, 'SUM(qty)':0], ['number':13, 
'SUM(qty)':1], ['number':14, 'SUM(qty)':1], ['number':15, 'SUM(qty)':2], 
['number':16, 'SUM(qty)':-1], ['number':17, 'SUM(qty)':0], ['number':18, 
'SUM(qty)':0], ['number':19, 'SUM(qty)':1], ['number':20, 'SUM(qty)':0]]

为什么 Grails 将文本“SUM(qty)”踢出到地图列表中?以及如何将其格式化为不这样做?

【问题讨论】:

    标签: mysql grails


    【解决方案1】:

    SQL API 和协议返回每个结果集的列标题元数据。这很方便:它允许 Workbench 和 Grails 等客户端软件找出数据类型和每列的名称。

    但是对于聚合列行SUM(qty),MySQL 服务器必须猜测名称。聚合列没有表中的列名。它猜测,嗯,SUM(qty)

    如果您将查询的第一行更改为 SELECT card.number, SUM(qty) sum_qty,您将获得更好的结果,因为您已经告诉 MySQL 列要使用的名称(在我的示例中为 sum_qty

    【讨论】:

    • 完美!知道有一个简单的答案......谢谢
    猜你喜欢
    • 2020-11-13
    • 2014-08-12
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多