mysql group by join_mysql – GROUP BY之后的LEFT JOIN?
到目前为止已经有了一些很好的答案,但我会采用一种与你原先描述的方法非常相似的方法
SELECT
songsWithTags.*,
COALESCE(SUM(v.vote),0) AS votesUp,
COALESCE(SUM(1-v.vote),0) AS votesDown
FROM (
SELECT
s.*,
COLLATE(GROUP_CONCAT(st.id_tag),'') AS tags_ids
FROM Songs s
LEFT JOIN Songs_Tags st
ON st.id_song = s.id
GROUP BY s.id
) AS songsWithTags
LEFT JOIN Votes v
ON songsWithTags.id = v.id_song
GROUP BY songsWithTags.id DESC
在此,子查询负责将带有标签的歌曲整理为每首歌曲1行.然后将其加入投票.我还选择简单地总结v.votes列,因为你已经指出它是1或0因此SUM(v.votes)将加起来1 1 1 0 0 = 3中有3是upvotes,而SUM(1 -v.vote)将总和0 0 0 1 1 = 5中的2个是downvotes.
如果你有一个带有列(id_song,vote)的投票索引,那么该索引将用于此,所以它甚至不会击中表.同样,如果您在Songs_Tags上有一个索引(id_song,id_tag),那么该表将不会被查询命中.
使用count编辑添加的解决方案
SELECT
songsWithTags.*,
COUNT(CASE WHEN v.vote=1 THEN 1 END) as votesUp,
COUNT(CASE WHEN v.vote=0 THEN 1 END) as votesDown
FROM (
SELECT
s.*,
COLLATE(GROUP_CONCAT(st.id_tag),'') AS tags_ids
FROM Songs s
LEFT JOIN Songs_Tags st
ON st.id_song = s.id
GROUP BY s.id
) AS songsWithTags
LEFT JOIN Votes v
ON songsWithTags.id = v.id_song
GROUP BY songsWithTags.id DESC
mysql group by join_mysql – GROUP BY之后的LEFT JOIN?相关推荐
- MySQL - order by和 group by 优化初探
文章目录 生猛干货 DB Version Table 数据量 案例一 :explain select * from employees where name = 'LiLei' and positio ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
<div class="post"><h1 class="postTitle"><a id="cb_post_title ...
- MySQL 8.0开始Group by不再排序
如题所示,mysql 8.0 开始 group by 默认是没有排序的 那mysql 8.0 之前和 8.0 就有可能结果出现不同 需要警惕 查看版本信息 root@mysql3306.sock> ...
- MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- mysql group by top_Mysql group by top N的问题 | 学步园
>>>>> 建表 create table mytable ( person varchar(10), `group` int, age int ); insert in ...
- mysql按年月排序group by升序_排序-在MySQL中按GROUP BY名称之前的日期和时间排序
排序-在MySQL中按GROUP BY名称之前的日期和时间排序 我有这样一张桌子: name date time tom | 2011-07-04 | 01:09:52 tom | 2011-07-0 ...
- MySQL——聚合函数和group by分组的使用
文章目录 MySQL--聚合函数和group by分组的使用 1.聚合函数介绍 2.GROUP BY 分组 3.常见的聚合函数 4.SQL执行顺序 MySQL--聚合函数和group by分组的使用 ...
- MySQL 5.7.20 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
最新文章
- CPU工作过程——MCU
- 快速搭建CentOS+ASP.NET Core环境支持WebSocket
- Pro ASP.NET 4 CMS
- 华强北耳机版本太多,不知道如何选购?
- 51Nod 1092 回文字符串(LCS + dp)
- 手机网络游戏系统架构图
- Filter_Listener:过滤器和监听器
- 7 ida pro 网盘_7月上市新车汇总 日产轩逸领衔 自主高端红旗HS7最具潜力
- VC9.VC10.VC11...各对应什么版本的VS,以及含义
- 安徽安全员B考试最新多选题库(2)
- 角度与弧度的转换 C语言
- 计算机教室消防说明,6.7 消防专用电话的设置
- 陶哲轩实分析 4.3 节习题试解
- SpringCloud学习笔记(五)服务发现Discovery
- 操作系统——PV操作
- Java汉字按照拼音排序
- 求问ps如何导出单个切片及PS导出所有的切片图像
- 存储过程之八-java代码调用oracle存储过程
- Android九宫格界面实现点击每个格点击跳转界面
- [Pytorch框架] 5.1 kaggle介绍