मेरे डेटा वर्ग की अंतिम परियोजना के लिए, मैं 900,000 से अधिक लेनदेन के डेटाबेस से MySQL (वर्कबेंच 6.3 सीई और सर्वर 5.7 का उपयोग करके) में मार्केट बास्केट विश्लेषण बनाने का प्रयास कर रहा हूं।

यहाँ एक टेबल का स्केच है जिसे मैंने एक साथ रखा है ताकि मुझे वह मिल सके जो मुझे चाहिए (कुछ सामान बाद के प्रश्नों के लिए है) ...

तालिका:

sales

कॉलम:

pos_trans_id INT(11) 
basketId VARCHAR(45) 
productNumber VARCHAR(25) 
productDescription VARCHAR(255) 
categoryCode VARCHAR(25) 
categoryDescription VARCHAR(255) 
subcategoryCode VARCHAR(25) 
subcategoryDescription VARCHAR(255) 
quantity INT(11) 
purchaseAmt DECIMAL(12,2) 
dateOfSale INT(11)

मार्केट बास्केट विश्लेषण का अपना संस्करण बनाने की कोशिश करने के लिए मैंने यही प्रश्न पूछा है:

SELECT purchaseone.productNumber, purchaseone.productDescription, purchasetwo.productNumber, purchasetwo.productDescription, purchaseone.basketId
FROM 
    (SELECT DISTINCT productNumber, productDescription, basketId
    FROM sales) AS purchaseone
        JOIN
        (SELECT DISTINCT productNumber, productDescription, basketId
        FROM sales) AS purchasetwo
        ON 
        (
            purchaseone.basketId = purchasetwo.basketId AND
            purchaseone.productNumber != purchasetwo.productNumber AND
            purchaseone.productNumber < purchasetwo.productNumber
            );

जिस समस्या में मैं चल रहा हूं वह यह है कि क्वेरी घंटों और घंटों और घंटों तक चलेगी और मुझे अंत में कुछ भी नहीं देगी, या वर्कबेंच में कल्पना करने में इतना समय लगेगा कि यह बेकार है।

क्या किसी के पास कोई विचार है अगर मैं यहां कुछ गलत कर रहा हूं या अगर कुछ ऐसा है जो मुझे चीजों को गति देने के लिए करना चाहिए? अग्रिम में धन्यवाद।

*संपादित करें: आपके द्वारा मांगा गया अतिरिक्त संदर्भ यहां दिया गया है। *

पूर्ण कच्ची डेटा फ़ाइल

मैंने अब तक दो कस्टम टेबल बनाए हैं:

CREATE TABLE `sales` (\n `pos_trans_id` int(11) NOT NULL DEFAULT \'0\', \n `basketId` varchar(45) DEFAULT NULL, \n `productNumber` varchar(25) DEFAULT NULL, \n `productDescription` varchar(255) DEFAULT NULL, \n `categoryCode` varchar(25) DEFAULT NULL, \n `categoryDescription` varchar(255) DEFAULT \'0\', \n `subcategoryCode` varchar(25) DEFAULT NULL, \n `subcategoryDescription` varchar(255) DEFAULT \'0\', \n `quantity` int(11) DEFAULT NULL, \n `purchaseAmt` decimal(12,2) DEFAULT NULL, \n `dateOfSale` int(11) DEFAULT NULL \n) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE 'date' (\n `dateKey` int(11) NOT NULL, \n `dayOfTheMonth` int(2) DEFAULT NULL, \n `dayOfTheWeek` int(1) DEFAULT NULL, \n PRIMARY KEY (`dateKey`) \n) \n ENGINE=InnoDB DEFAULT CHARSET=latin1

-1
lukesstilllearning 8 मई 2018, 23:42

1 उत्तर

सबसे बढ़िया उत्तर

आपकी क्वेरी से, ऐसा प्रतीत होता है कि आप एक "खरीदा गया" या "खरीदा गया" प्रकार का विश्लेषण तैयार करने का प्रयास कर रहे हैं। नीचे दी गई क्वेरी काफी तेज चलनी चाहिए। यह आपकी क्वेरी में उप-प्रश्नों को समाप्त करता है और कार्य को काफी सरल करता है।

SELECT 
    a.productNumber, 
    a.productDescription, 
    b.productNumber, 
    b.productDescription, 
    a.basketId
FROM `purchaseone` a
LEFT JOIN `purchaseone` b
ON a.basketId = b.basketId AND
    a.productNumber != b.productNumber AND
    a.productNumber < b.productNumber
GROUP BY a.basketId, a.productNumber, b.productNumber
1
Sloan Thrasher 9 मई 2018, 00:45