当前的sql:
SELECT
clientId,
groupID,
COUNT(DISTINCT clientId) AS visitors,
ROUND(AVG(price),2) AS price
FROM
(
SELECT `devices`.*, MAX(`url`.price) AS price
FROM `devices`, `url`
WHERE `devices`.visited_url = `url`.website
) devices
GROUP BY `devices`.groupID
设备表数据:
id clientId device groupId visited_url
1 client1 samsung 123 fb.com
2 client1 samsung 123 google.com
3 client1 samsung 123 fb.com
4 client1 samsung 123 fb.com
5 client2 iphone 123 google.com
6 client2 iphone 123 google.com
网址表数据:
id website price
1 fb.com $1
2 google.com $2
我想得到visited_url的价格
尝试过这种方法:
ROUND(AVG(MAX(value)),2) AS value
得到了这个错误:
Error Code: 1111. Invalid use of group function
问题是:如何将ROUND()
,AVG()
和MAX()
合并为一行?
我想要的结果是:
clientId groupID website visitors price
client1 123 fb.com 3 $3 (avg)
client1 123 google.com 1 $2 (avg)
client2 123 google.com 2 $4 (avg)
答案 0 :(得分:0)
您似乎只想要一个JOIN
和GROUP BY
。根据您想要的结果:
SELECT clientId, groupID, COUNT(*) AS visitors,
ROUND(SUM(price), 2) AS price
FROM devices d JOIN
url u
ON d.visited_url = u.website
GROUP BY clientId, groupID;
答案 1 :(得分:-1)
所以,你不能得到max()的舍入平均值......因为max是一回事,任何平均值都是自己的。现在,你能做的就是这个......
SELECT ROUND(AVG(value), 2), MAX(value) FROM tableName
注意:'价值'是你的COLUMN名字。 '表名'显然是你的表名:)
然后你只需将其绑定为2个结果......第一个结果将是'值的舍入平均值'柱。第二个结果是舍入的最大值'值'柱。
但不幸的是,当你使用MAX()时,你会说"告诉我这里的最大值是什么。"这会将您限制为1个结果,但AVG()希望获得整列的平均值,就像MAX()函数一样......因此它具有无效的分组。