数据量150万条,样表如下:
销售单号                    商品20190101                    A20190101                    B20190101                    C20190102                    A20190102                    C20190103                    C20190103                    D我写了一段SQL,数据量少还可以,但速度也很慢,数据量上万直接卡死,求大神指点SELECT y.商品编码1, y.商品编码2, COUNT(DISTINCT y1.销售单号) as jsFROM(    SELECT A.商品编码 as 商品编码1, B.商品编码 as 商品编码2    FROM (SELECT DISTINCT 商品编码 FROM 销售表) A,        (SELECT DISTINCT 商品编码 FROM 销售表) B    WHERE A.商品编码 < B.商品编码) y  INNER JOIN 销售表 y1 ON y1.商品编码 = y.商品编码1WHERE E销售表ISTS(SELECT * FROM 销售表 y2  WHERE y2.销售单号 = y1.销售单号   AND y2.商品编码 = y.商品编码2)GROUP BY y.商品编码1, y.商品编码2;   

解决方案 »

  1.   

    到处是distinct 肯定慢
      

  2.   

    没理解,是看总共次数最多,还是同一个销售单上的次数是最多的?从你的例子上看,C总数最多。但你的回复又是A和C?
      

  3.   

    问题没看懂,但是慢是因为这句WHERE A.商品编码 < B.商品编码0.5*n*n的数据量,肯定卡死
      

  4.   

    我没有你的表,不知道这么写结果对不对。
    首先,要假定你同一个销售单号里没有2个及以上相同的商品。
    其次,我返回的内容,是同一个销售单号中,2件商品和对应的出现次数,按照倒序排列。SELECT
      t1.商品编码,
      t2.商品编码,
      COUNT(0)
    FROM
      销售表 t1,
      销售表 t2
    WHERE t1.销售单号 = t2.销售单号
      AND t1.商品编码 > t2.商品编码
    GROUP BY t1.商品编码,
      t2.商品编码
    ORDER BY 3 DESC;
      

  5.   

    你看看这是语句是不是你想要的
     select max(num) 
    from (
                  select count(商品) as num, 商品  
                  from tableName groupby 商品
              )
      

  6.   

    想找到同时出现在一张销售单上的商品,从样表上看商品A和C同时出现在同一个销售单上的次数是最多的,因为20190101和20190102两个销售单里都有商品A和C。