Hallo allemaal,

Voor de berekening van een KPI (Key Performance Indicator), de zgn. conversiepercentage moet ik twee queries uitvoeren in twee verschillende tabellen die niet via een JOIN zijn te koppelen.
De eerste query berekent het aantal hits op de webshop en de tweede het aantal uiteindelijke orders die deze bezoeken tot resultaat hebben.
De uiteindelijke score moet in procenten worden weergegeven.

De code voor het aantal hits op de webshop is:

SELECT
   COUNT(id) AS aantalhits
FROM
   sys__logfile
WHERE
   websitenaam = 'webshop' AND
   MONTH(datum) = 7 AND YEAR(datum) = 2013


De code voor het berekenen van het aantal uiteindelijke orders is:

SELECT 
   COUNT(DISTINCT(ordernummer)) AS aantalorders
FROM 
   shop__bestellingen
WHERE
   MONTH(besteldatum) = 7 AND YEAR(besteldatum) = 2013


De berekening naar percentage is dan:
{code]
<?php
(aantalorders/aantalhits) * 100
?>
[/code]

Hoe maak ik hier nu één query van?


George
Met een subquery creeer je een set aan gegevens, maar hoe je die inzet kan verschillende zijn. Je kan bijvoorbeeld dit doen:

SELECT username
FROM users
WHERE user_id IN (SELECT user_id FROM bans)

In dit geval kan het natuurlijk ook wel anders, maar zo gebruik je de uitkomsten echt alleen als data.

Doe je dit echter:

SELECT user_id
FROM (
  SELECT user_id 
  FROM bans
) 

Dan gebruik je de uitkomsten als een virtuele tabel. Het staat namelijk in de FROM clause. Dit zal nu echter een foutmelding opleveren, omdat er geen alias is gegeven en MySQL dus geen naam heeft voor de virtuele tabel.

De alias kan je met en zonder AS geven, dat keyword is noet verplicht. Ik merk dat ik het wel altijd gebruik als ik kolommen een alias geef, maar niet als ik het doe bij tabellen.
helder, bedankt :)
Enneh:
Jeroen VD op 01/08/2013 19:54:47
ik kan nog veel leren zo te zien :)

Ik ook hoor. De helft van dat verhaal over het gebruik van een index papagaai ik ook van Ger :-)

hahaha dan zal ik dat ook maar eens meer gaan doen!
As hoort in de asbak ;-).

@Erwin,
In jouw query is het een ander verhaal, maar de subquery zelf gebruikt de indexen wel, alleen het resultaat (de derived table) heeft geen indexen meer.

Overigens zou ik dit ook gewoon met 2 query's doen.

Reageren