我正在尝试这样做
查询query = session.createQuery(“*,sum(quantity)FROM Inventory ORDER BY price ASC,> entry_time ASC”);
不断收到错误,说它不会重新认识* ..
错误:第1行:1:意外令牌:*第1行:1:意外令牌:*
所以我尝试了另一种方式SELECT *,sum(quantity)来自库存ORDER BY价格ASC,entry_time ASC
得到与上述相同的错误,加上:
org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: *靠近第1行第8列[SELECT *,SUM(数量)FROM库存ORDER BY价格ASC,entry_time ASC]
那么我如何检索所有列,同时如果它们都不起作用的话总结它们? (该命令实际上在SQLWave中工作..但不能通过Java + Hib工作)
这是我尝试运行的查询(使用SQL wave工作)
SELECT *,sum(quantity)FROM(SELECT * FROM Inventory ORDER BY price ASC,entry_time ASC)按价格分组
答案 0 :(得分:1)
不幸的是,当您使用聚合函数时,您必须指定要检索的所有列。 SELECT *, SUM(quantity)
无效。
SELECT子句中没有聚合的所有列都需要在GROUP BY
中好:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3
也很好:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, col5, col6
没有其他列=没有需要GROUP BY
SELECT MAX(col4)
...
无效:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2
毫无意义:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, MAX(col4)
将聚合(MAX等)与其他没有GROUP BY的列放在一起是没有意义的,因为查询变得模糊不清。