Mysql 使用SQL(Grails)的输出映射中的“SUM()”

Mysql 使用SQL(Grails)的输出映射中的“SUM()”,mysql,grails,Mysql,Grails,在my 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控制器中,我有以下功能: S

在my 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为什么要将文本SUMqty踢到映射列表中?如何将其格式化为不执行此操作?

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

但是对于聚合列行SUMqty,MySQL服务器必须猜测名称。聚合列没有表中的列名。它猜测,好吧,SUMqty


如果您将查询的第一行更改为选择card.number,SUMqty sum\u qty,您将得到更好的结果,因为您在我的示例中告诉了MySQL要用于列的名称sum\u qty,SQL API和协议将返回每个结果集的列头元数据。这很方便:它允许Workbench和Grails等客户机软件计算出数据类型和每列的名称

但是对于聚合列行SUMqty,MySQL服务器必须猜测名称。聚合列没有表中的列名。它猜测,好吧,SUMqty


如果您将查询的第一行更改为选择card.number,SUMqty sum\u qty,您将得到一个更好的结果,因为在我的示例中,您已经告诉MySQL要用于列的名称sum\u qty

完美!我知道答案很简单。。。谢谢你!我知道答案很简单。。。谢谢