Beste Devvers,
Wij hebben een priority queue in MySQL gebouwd. Hierin worden SKU's (code kolom) en het bijbehorende gewicht per SKU (weight kolom) opgeslagen.
Deze priority queue bevat SKU's welke opnieuw geïndexeerd dienen te worden. Naargelang de belangrijkheid van het aangepaste attribuut van het product wordt deze SKU in de tabel weggeschreven met corresponderend "gewicht". Een consumer lepelt op zijn gemak die lijst leeg, de SKU's met het hoogste gewicht komen als eerste aan de beurt en zo werkt hij de lijst langzaam weg / af.
Op dit moment heb ik de volgende MySQL query geschreven die per gewicht het aantal producten aangeeft dat nog geïndexeerd dient te worden:
Dit levert onderstaande lijst op:
Bovenstaande uitkomst wordt op een statuspagina weergegeven. Dit werkt allemaal naar behoren.
Nu is het verzoek gekomen of ook het totaal (row count) van de gehele lijst in hetzelfde tabelletje getoond kan worden.
Wat ik dus probeer te bereiken is het volgende:
Waar foobar ieder willekeurige tekst kan hebben, zo lang het maar duidelijk is dat het geen echt gewicht betreft maar het totaal.
Ik heb geprobeerd middels de volgende query het totaal te bemachtigen:
Dit levert niet het gewenste resultaat op. Maar voegt aan het eerdergenoemde resultaat de kolom backlog toe met daarin exact dezelfde waardes als in de total kolom.
Ook heb ik middels een subquery geprobeerd de totalen te tellen:
Maar nu heb ik feitelijk een hele dure COUNT(*) geschreven
Ik weet niet zeker of het wel mogelijk is om dit in 1 query voor elkaar te krijgen. Kan het anders misschien in een VIEW?
Relevante software die ik gebruik: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Wie kan mij een duwtje in de goede richting geven?
Alvast bedankt
Matis
Wij hebben een priority queue in MySQL gebouwd. Hierin worden SKU's (code kolom) en het bijbehorende gewicht per SKU (weight kolom) opgeslagen.
Deze priority queue bevat SKU's welke opnieuw geïndexeerd dienen te worden. Naargelang de belangrijkheid van het aangepaste attribuut van het product wordt deze SKU in de tabel weggeschreven met corresponderend "gewicht". Een consumer lepelt op zijn gemak die lijst leeg, de SKU's met het hoogste gewicht komen als eerste aan de beurt en zo werkt hij de lijst langzaam weg / af.
Op dit moment heb ik de volgende MySQL query geschreven die per gewicht het aantal producten aangeeft dat nog geïndexeerd dient te worden:
SQL:
1
2
3
4
5
| SELECT FORMAT(weight,0) AS weight, FORMAT(COUNT(DISTINCT(`code`)),0) AS total FROM ProductService.product_export_update_list cpeul GROUP BY cpeul.weight; |
Dit levert onderstaande lijst op:
+---------+-----------+ | weight | total | +---------+-----------+ | 1,000 | 21,362 | | 2,000 | 36,210 | | 40,000 | 1,401,756 | | 75,000 | 4,125,421 | | 80,000 | 628,652 | | 100,000 | 69,386 | | 150,000 | 496,404 | | 170,000 | 168 | | 200,000 | 6,367 | | 340,000 | 645 | | 700,000 | 3,542 | +---------+-----------+
Bovenstaande uitkomst wordt op een statuspagina weergegeven. Dit werkt allemaal naar behoren.
Nu is het verzoek gekomen of ook het totaal (row count) van de gehele lijst in hetzelfde tabelletje getoond kan worden.
Wat ik dus probeer te bereiken is het volgende:
+---------+-----------+ | weight | total | +---------+-----------+ | 1,000 | 21,362 | | 2,000 | 36,210 | | 40,000 | 1,401,756 | | 75,000 | 4,125,421 | | 80,000 | 628,652 | | 100,000 | 69,386 | | 150,000 | 496,404 | | 170,000 | 168 | | 200,000 | 6,367 | | 340,000 | 645 | | 700,000 | 3,542 | | foobar | 6,757,324 | +---------+-----------+
Waar foobar ieder willekeurige tekst kan hebben, zo lang het maar duidelijk is dat het geen echt gewicht betreft maar het totaal.
Ik heb geprobeerd middels de volgende query het totaal te bemachtigen:
SQL:
1
2
3
4
5
6
| SELECT FORMAT(weight,0) AS weight, FORMAT(COUNT(DISTINCT(`code`)),0) AS total, FORMAT(COUNT(`code`),0) AS backlog FROM ProductService.product_export_update_list cpeul GROUP BY cpeul.weight; |
Dit levert niet het gewenste resultaat op. Maar voegt aan het eerdergenoemde resultaat de kolom backlog toe met daarin exact dezelfde waardes als in de total kolom.
Ook heb ik middels een subquery geprobeerd de totalen te tellen:
SQL:
1
2
3
4
5
6
7
| SELECT FORMAT(SUM(total),0) AS backlog FROM ( SELECT weight, COUNT(DISTINCT(`code`)) AS total FROM ProductService.product_export_update_list cpeul GROUP BY cpeul.weight ) AS total_test; |
Maar nu heb ik feitelijk een hele dure COUNT(*) geschreven
+-----------+ | backlog | +-----------+ | 6,790,952 | +-----------+
Ik weet niet zeker of het wel mogelijk is om dit in 1 query voor elkaar te krijgen. Kan het anders misschien in een VIEW?
Relevante software die ik gebruik: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Wie kan mij een duwtje in de goede richting geven?
Alvast bedankt
Matis
If money talks then I'm a mime
If time is money then I'm out of time