这是我编写的SQL查询。它一直工作到group by语句之前,但是一旦我添加了那个部分,我就会收到这个错误:
'reading_datetime'既不存在于组中,也不是聚合函数。如果您不关心您获得哪个值,请添加到group by或wrap in first()(或first_value)
我的查询:
Select A.bill_account, hour(A.reading_datetime), A.reading_value
from (
Select cast(cast(bill_account as double) as int)bill_account, reading_datetime, cast(reading_value as double)reading_value, `interval`
from amerendataorc
WHERE cast(cast(`interval` as double)as int) = 3600 AND reading_datetime between '2015-03-15 00:00:00' and '2016-03-14 23:59:59'
) A
GROUP BY A.bill_account
HAVING (COUNT(A.bill_account)>= 8000) and (COUNT(A.bill_account) < 9500)")
不确定群组是如何弄乱查询的。
答案 0 :(得分:0)
取阅读日期时间和阅读值之和
Select A.bill_account, sum(hour(A.reading_datetime)), sum(A.reading_value)
from (
Select cast(cast(bill_account as double) as int)bill_account, reading_datetime, cast(reading_value as double)reading_value, `interval`
from amerendataorc
WHERE cast(cast(`interval` as double)as int) = 3600 AND reading_datetime between '2015-03-15 00:00:00' and '2016-03-14 23:59:59'
) A
GROUP BY A.bill_account
HAVING (COUNT(A.bill_account)>= 8000) and (COUNT(A.bill_account) < 9500)")
----解释------------
mysql> SELECT * FROM tt where user="user1";
+----------+-------+
| duration | user |
+----------+-------+
| 00:06:00 | user1 |
| 00:02:00 | user1 |
+----------+-------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM tt where user="user1" group by user;
+----------+-------+
| duration | user |
+----------+-------+
| 00:06:00 | user1 |
+----------+-------+
1 row in set (0.00 sec)
一旦你按照它添加分组,它将只给出分组后的总和,在上面的例子中给出第一个值 否则你可以得到总和,最大......聚合值
答案 1 :(得分:0)
SQL正试图避免每个A.Bill_Account有多个hour(A.reading_datetime)
的问题。按Bill_account
分组会为您提供唯一Bill_account
的列表。然后,每个hour(A.reading_datetime)
有多个Bill_account
,需要您帮助它选择一个reading_datetime
。
您需要按出现的每个值进行分组,或者在非分组字段中使用聚合函数。如果您按reading_value
和Bill_account
分组,SQL将列出组中三个字段的所有唯一组合。
MySql建议使用first(); max()min()sum()等都是聚合函数,可以帮助你获得每Number.MAX_VALUE
一次的值。
您还需要为reading_value执行此操作。
答案 2 :(得分:0)
标准SQL不允许选择列表引用未在GROUP BY子句中命名的非聚合列的查询。 因此,您必须将这些列添加到GROUP BY子句中,或者您必须在SELECT子句中聚合列,在您的情况下:
<a href="about.html"
onMouseOver="imgOn('about_btn')"
onMouseOut="imgOff('about_btn')"><img border=0 src="images/buttons/about_btn.png" draggable="false" width="105" name="about_btn"/></a>
但是你必须评估你的数据是否足以以这种方式对这些列求和,如果不是,则将列添加为GROUP BY标准。
答案 3 :(得分:-2)
任何未包含在“分组条款”中的字段都需要将SUM,COUNT,MIN或MAX等聚合函数包含在“选定”字段中。
要解决此问题,您需要使用以下分组
GROUP BY A.bill_account,A.reading_datetime,A.reading_value