到目前为止已经有了一些很好的答案,但我会采用一种与你原先描述的方法非常相似的方法

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?相关推荐

  1. MySQL - order by和 group by 优化初探

    文章目录 生猛干货 DB Version Table 数据量 案例一 :explain select * from employees where name = 'LiLei' and positio ...

  2. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  3. MySQL 8.0开始Group by不再排序

    如题所示,mysql 8.0 开始 group by 默认是没有排序的 那mysql 8.0 之前和 8.0 就有可能结果出现不同 需要警惕 查看版本信息 root@mysql3306.sock> ...

  4. MySQL中distinct和group by性能比较

    MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...

  5. mysql group by top_Mysql group by top N的问题 | 学步园

    >>>>> 建表 create table mytable ( person varchar(10), `group` int, age int ); insert in ...

  6. mysql按年月排序group by升序_排序-在MySQL中按GROUP BY名称之前的日期和时间排序

    排序-在MySQL中按GROUP BY名称之前的日期和时间排序 我有这样一张桌子: name date time tom | 2011-07-04 | 01:09:52 tom | 2011-07-0 ...

  7. MySQL——聚合函数和group by分组的使用

    文章目录 MySQL--聚合函数和group by分组的使用 1.聚合函数介绍 2.GROUP BY 分组 3.常见的聚合函数 4.SQL执行顺序 MySQL--聚合函数和group by分组的使用 ...

  8. MySQL 5.7.20 Group Relication(组复制)搭建手册

    本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...

  9. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】

    本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...

最新文章

  1. CPU工作过程——MCU
  2. 快速搭建CentOS+ASP.NET Core环境支持WebSocket
  3. Pro ASP.NET 4 CMS
  4. 华强北耳机版本太多,不知道如何选购?
  5. 51Nod 1092 回文字符串(LCS + dp)
  6. 手机网络游戏系统架构图
  7. Filter_Listener:过滤器和监听器
  8. 7 ida pro 网盘_7月上市新车汇总 日产轩逸领衔 自主高端红旗HS7最具潜力
  9. VC9.VC10.VC11...各对应什么版本的VS,以及含义
  10. 安徽安全员B考试最新多选题库(2)
  11. 角度与弧度的转换 C语言
  12. 计算机教室消防说明,6.7 消防专用电话的设置
  13. 陶哲轩实分析 4.3 节习题试解
  14. SpringCloud学习笔记(五)服务发现Discovery
  15. 操作系统——PV操作
  16. Java汉字按照拼音排序
  17. 求问ps如何导出单个切片及PS导出所有的切片图像
  18. 存储过程之八-java代码调用oracle存储过程
  19. Android九宫格界面实现点击每个格点击跳转界面
  20. [Pytorch框架] 5.1 kaggle介绍

热门文章

  1. poj 3131 双向搜索+hash判重
  2. 设计模式:桥接模式(Bridge Pattern)
  3. Android实现数据存储技术
  4. C++中如何定义某个数组的引用?
  5. 请教 Discuz syscache 中一段cache 的意思
  6. linux下系统安全常见问题2
  7. COBOL 学习笔记 之 入門篇(续集)
  8. RPA技术干货 | RPA防锁屏运行技巧
  9. Spring内部bean实例
  10. JS(去掉前后空格或去掉所有空格)的用法