MYSQL:在多行选择中使用 COUNT 和 SUM 函数的问题
Posted
技术标签:
【中文标题】MYSQL:在多行选择中使用 COUNT 和 SUM 函数的问题【英文标题】:MYSQL: Problems using COUNT and SUM functions in multi row select 【发布时间】:2012-04-09 13:12:48 【问题描述】:我正在尝试创建一个从数据库中轮流选择广告的过程。并最终返回选中的广告行并增加浏览量。
我目前正在处理的部分应该
-
从“广告”表中提取结果,其中“城市”与给定城市匹配,“地点”与给定地点名称匹配。
添加一个额外的“num”列来枚举结果行。
从这些结果中,选择“num”列与 SUM('views') % COUNT(id) 匹配的行
只要我在最终选择并返回广告时增加视图列,这应该允许我轮流显示广告
我目前正在处理的代码是......
SET @t1=-1;
SELECT *
FROM (SELECT @t1 := @t1+1 AS num, ads.*
FROM ads
WHERE city = 'Maitland'
AND spot = 'home-banner'
ORDER BY id ASC) dt
WHERE dt.num = SUM(dt.views) % COUNT(dt.id);
...但是我遇到了 SUM 和 COUNT 函数的问题。我收到无效使用组功能错误。我也尝试过将函数移到子查询内部,但由于某种原因,这会导致子查询只返回一个结果。
子查询结果
num id spot city views
0 1 home-banner Maitland 0
1 2 home-banner Maitland 2
2 3 home-banner Maitland 0
3 4 home-banner Maitland 0
4 5 home-banner Maitland 0
5 6 home-banner Maitland 0
【问题讨论】:
【参考方案1】:试试这个:
SELECT * FROM (
SELECT @t1 := @t1 + 1 AS num, ads.*
FROM ads, (SELECT @t1 := -1) init
WHERE city = 'Maitland' AND spot = 'home-banner'
ORDER BY id ASC
) dt
WHERE dt.num = (
SELECT SUM(views) % COUNT(id) FROM ads
WHERE city = 'Maitland' AND spot = 'home-banner')
【讨论】:
谢谢,但这不会计算整个广告表的视图模数和计数,而不是子查询的结果吗?我只关心匹配城市和地点的结果。我想我可以重复 WHERE 子句,但这不是双重职责吗? 你说得对,我错过了 WHERE 子句。是的,这将花费更长的时间,但这是我能想到的唯一方法:(您还可以创建一个临时表并存储所有当前城市和现场数据,然后查询该表以获取sum
和 count
好的,希望在实践中不会太糟糕。感谢临时表的建议,也许那会是更好的路线。最终,我将为同一个城市拉出多个广告位(10 个左右)。以上是关于MYSQL:在多行选择中使用 COUNT 和 SUM 函数的问题的主要内容,如果未能解决你的问题,请参考以下文章