資料量150萬條,樣表如下:
銷售單號 商品
20190101 A
20190101 B
20190101 C
20190102 A
20190102 C
20190103 C
20190103 D
我寫了一段SQL,資料量少還可以,但速度也很慢,資料量上萬直接卡死,求大神指點
SELECT y.商品編碼1, y.商品編碼2, COUNT(DISTINCT y1.銷售單號) as js
FROM(
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.商品編碼1
WHERE E銷售表ISTS(SELECT * FROM 銷售表 y2 WHERE y2.銷售單號 = y1.銷售單號 AND y2.商品編碼 = y.商品編碼2)
GROUP BY y.商品編碼1, y.商品編碼2;
uj5u.com熱心網友回復:
到處是distinct 肯定慢uj5u.com熱心網友回復:
按照你的樣例,希望得到的結果是什么?uj5u.com熱心網友回復:
從樣表上看商品A和C出現在同一個銷售單上的次數是最多的uj5u.com熱心網友回復:
沒理解,是看總共次數最多,還是同一個銷售單上的次數是最多的?從你的例子上看,C總數最多。但你的回復又是A和C?
uj5u.com熱心網友回復:
問題沒看懂,但是慢是因為這句WHERE A.商品編碼 < B.商品編碼
0.5*n*n的資料量,肯定卡死
uj5u.com熱心網友回復:
我沒有你的表,不知道這么寫結果對不對。首先,要假定你同一個銷售單號里沒有2個及以上相同的商品。
其次,我回傳的內容,是同一個銷售單號中,2件商品和對應的出現次數,按照倒序排列。
SELECT
t1.商品編碼,
t2.商品編碼,
COUNT(0)
FROM
銷售表 t1,
銷售表 t2
WHERE t1.銷售單號 = t2.銷售單號
AND t1.商品編碼 > t2.商品編碼
GROUP BY t1.商品編碼,
t2.商品編碼
ORDER BY 3 DESC;
uj5u.com熱心網友回復:
補充一點,需要加索引,銷售單號 + 商品編碼 組合索引,順序別弄錯了。uj5u.com熱心網友回復:
你看看這是陳述句是不是你想要的
select max(num)
from (
select count(商品) as num, 商品
from tableName groupby 商品
)
uj5u.com熱心網友回復:
想找到同時出現在一張銷售單上的商品,從樣表上看商品A和C同時出現在同一個銷售單上的次數是最多的,因為20190101和20190102兩個銷售單里都有商品A和C。uj5u.com熱心網友回復:
同時這個概念沒說清楚,同時幾個商品? 1個算不算?2個還是3或者4個,不說清楚規則沒法寫代碼轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/49710.html
標籤:開發
上一篇:怎么樣快速的把oracle里的百萬資料遷移到mysql
下一篇:ORACLE練習題 求指教
