MySQL GROUP BY对计算值给出错误 – 使用其他值会产生意外结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL GROUP BY对计算值给出错误 – 使用其他值会产生意外结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1979字,纯文字阅读大概需要3分钟。
内容图文
![MySQL GROUP BY对计算值给出错误 – 使用其他值会产生意外结果](/upload/InfoBanner/zyjiaocheng/899/2e48c6368dfe4f0e9e385ab2ef673d14.jpg)
此查询返回所有这些music.id的23个:
39,64,1327,1608,1644,1657,1666,1676,1681,1686,1691,1711,1726,1730,1811,1851,2346,2440,2967,2968,2996,2998,3110
但是……我想按计算值分组,然后按类别分组(因为’name’对每条记录都是唯一的,而类别不是)
SELECT
music.id,
music.name AS name,
music.filename,
music.url_name,
music.file_path_high,
music.filesize,
music.categories AS category,
music.duration,
music.folder AS folder,
SUM(active0.weight) + SUM(active1.weight) AS total_weight
FROM (music)
INNER JOIN linked_tags AS active0
ON active0.track_id = music.id AND active0.tag_id = 1
INNER JOIN linked_tags AS active1
ON active1.track_id = music.id AND active1.tag_id = 11
GROUP BY name
ORDER BY total_weight DESC
但是……当我尝试GROUP BY total_weight时我得到一个错误(它说我“不能在total_weight上分组”).我可以不按计算值分组吗?此外,如果我尝试GROUP BY任何其他值,返回的结果对于该GROUP BY参数是唯一的,因此根据参数,我可能得到0结果.例如,GROUP BY’music.categories’只返回7个项目,7个项目都有不同的类别.每个项目的“名称”值都是唯一的,所以无论如何它实际上都无法分组,所以我认为通过“类别”分组至少会按照它们所属类别的整数对它们进行分组,但这不是我的意思.我看到了.
我的表结构是这样的:
//music table
ID name categories
1 Hopeful 02 1
2 Organic 01b 3
3 Organic 01c 3
4 Instrumental 01 8
// linked_tags table
track_id tag_id weight
1 1 3
2 2 4
2 3 5
2 1 2
解决方法:
我认为你误解了SQL中的分组 – 它确保每个组合组只返回一行.
为了按特定顺序检索多行,您需要使用order by – 如下所示:
SELECT
music.id,
music.name AS name,
music.filename,
music.url_name,
music.file_path_high,
music.filesize,
music.categories AS category,
music.duration,
music.folder AS folder,
SUM(active.weight) AS total_weight
FROM (music)
INNER JOIN linked_tags AS active
ON active.track_id = music.id AND active.tag_id in (1, 11)
GROUP BY music.id
HAVING COUNT(DISTINCT active.tag_id)=2
ORDER BY category, total_weight DESC
内容总结
以上是互联网集市为您收集整理的MySQL GROUP BY对计算值给出错误 – 使用其他值会产生意外结果全部内容,希望文章能够帮你解决MySQL GROUP BY对计算值给出错误 – 使用其他值会产生意外结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。