[PHP/MySQL] Can't group by count

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
    // How many clients placed how many orders
    $graphData = array();
    $data = mysql_query("SELECT COUNT(orders.invoicenumber) AS nrOrders, COUNT(customers.cust_id) AS nrClients 
FROM customers LEFT JOIN orders ON customers.cust_id=orders.cust_id GROUP BY nrOrders 
ORDER BY nrOrders DESC");
    echo mysql_error();
    while(list($nrOrders, $nrClients) = mysql_fetch_row($data)) {
        array_push($graphData, array($nrOrders." orders", $nrClients, '')); 
    }
    echo phpHtmlChart($graphData, 'H', 'Number of clients with certain number of orders',
 'Number of clients', '8pt', 400, 'px', 15, 'px');
Ik wil het aantal klanten met een bepaald aantal orders weergeven in een grafiekje, maar loop tegen het volgende probleem aan: hij zegt dat GROUP BY nrOrders niet kan. Blijkbaar kun je niet groeperen op een COUNT :?
Hoe los ik dit nu het handigst op?

[ Voor 16% gewijzigd door Verwijderd op 31-10-2004 16:08 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-09 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Wat wil je voor elkaar krijgen dan? :) Ik zie het nut van de Group By in deze constructie namelijk niet. Je vraagt nu het aantal orders en het aantal klanten op :)
Ik wil het aantal klanten met een bepaald aantal orders
Wat bedoel je hier precies mee? :)

[ Voor 27% gewijzigd door gorgi_19 op 31-10-2004 16:08 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil in een staafgrafiekje plotten:
- Er zijn 5 klanten met 2 orders
- Er zijn 8 klanten met 3 orders
- Er zijn 2 klanten met 4 orders
- Enz...

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 31 oktober 2004 @ 16:10:
Ik wil in een staafgrafiekje plotten:
- Er zijn 5 klanten met 2 orders
- Er zijn 8 klanten met 3 orders
- Er zijn 2 klanten met 4 orders
- Enz...
Dus het aantal klanten per aantal orders? x-as aantal orders; y-as aantal klanten?

edit: dat zeg je net.. laat maar zitten.

[ Voor 8% gewijzigd door Verwijderd op 31-10-2004 17:29 ]


Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Ik weet niet zeker of het uberhaupt is toegestaan om aggregatie functies in de group by te stoppen, maar iig zou je dan ook nog moeten groeperen op orders.cust_id. COUNT(orders.invoicenumber) zou anders sowieso maar 1 resultaat geven, namelijk: het totale aantal orders waarbij invoicenumber niet null is. Daarop groeperen heeft dan weinig effect.

Het zou wel moeten kunnen met een tijdelijke tabel, dan krijg je iets als:
(niet getest)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$sql = 'CREATE TEMPORARY TABLE tmp '
         . '  SELECT COUNT(orders.invoicenumber) AS nrOrders '
         . '  FROM customers LEFT JOIN orders ON customers.cust_id=orders.cust_id '
         . '  GROUP BY orders.cust_id ';
mysql_query($sql);

$sql = 'SELECT nrOrders, count(*) '
         . 'FROM tmp '
         . 'Group by nrOrders; ';
$data = mysql_query($sql);

while(list($nrOrders, $nrClients) = mysql_fetch_row($data)) { 
    array_push($graphData, array($nrOrders." orders", $nrClients, '')); 
} 
echo phpHtmlChart($graphData, 'H', 'Number of clients with certain number of orders'
,  'Number of clients', '8pt', 400, 'px', 15, 'px');
        
$sql = 'DROP TABLE tmp;';
mysql_query($sql);
?>

[ Voor 10% gewijzigd door pjotrk op 31-10-2004 17:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou het ook kunnen doen m.b.v. een subquery mits de database dit ondersteunt. Met mysql 4.0 zal het bijv. niet werken.


code:
1
2
3
4
5
6
SELECT COUNT(customers.cust_id) nrClients,nrOrders
FROM
  (SELECT customers.cust_id, COUNT(orders.invoicenumber) AS nrOrders
   FROM customers left JOIN orders ON customers.cust_id = orders.cust_id
   GROUP BY customers.cust_id)
GROUP BY nrOrders


By the way ook niet getest... Maar zou moeten werken :9

Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Verwijderd schreef op 31 oktober 2004 @ 21:28:
By the way ook niet getest... Maar zou moeten werken :9
Kan idd ook alleen moet je dan wel altijd je 'derived table' een alias geven. :), maar is idd wel een mooiere oplossing dan temporary tabellen.
Pagina: 1