• MYSQL的group by笔记


         对应的表数据如下

        

        现在的需求是要找出dcid为9951,9957,9064共同拥有的good_code。

        第一种方案是

      SELECT
        a.good_code
      FROM
      (
        SELECT
          good_code
        FROM
        XXX
        WHERE
          dcid = '9951'
      ) a
      INNER JOIN (
        SELECT
          good_code
        FROM
        XXX
        WHERE
          dcid = '9957'
      ) b ON a.good_code = b.good_code

      INNER JOIN (

        SELECT
          good_code
        FROM
        XXX
        WHERE
          dcid = '9064'

      ) c ON a.good_code = c.good_code;

    第一种方案的思路是先分别找出表中dcid为9951,9957,9064的记录,然后把这些记录作内连接,这样的做法可以得到正确的结果,但是非常耗时,耗费的时间是0.3秒左右。

    ==================分割线=============

    第二种方案是

      SELECT good_code from XXX  where dcid in ('9951','9957','9064') GROUP BY good_code HAVING count(good_code)=3

    第二种方案的思路是先筛选出dcid为9951,9957,9064的记录,然后对筛选后的记录用good_code进行分组group by good_code,并对分组后的记录进行筛选HAVING count(good_code)=3,这里的count(good_code)是对同样的good_code进行计数,则我们可以判断当good_code的计数为3(也就是good_code有3条记录,分别对应9951,9957,9064)的就是符合我们要找的,此种sql耗费的时间是0.05秒左右,缩短了查询需要的时间。

  • 相关阅读:
    主流浏览器标签默认样式一览
    为什么要清除默认样式?
    php 的空间命名以及对对象的相关操作,扩展到对数据库的相关函数
    js string
    js基础
    ubuntu-desktop
    php 时期相关函数
    字符串,验证码
    function 相关
    ubuntu_soft相关安装
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/6522863.html
Copyright © 2020-2023  润新知