2010-10-27 6 views
1
SELECT COUNT(sendbook.id) AS total, SUM(sendbook.num) AS num, (

SELECT COUNT(sendbook.id) 
FROM sendbook 
INNER JOIN clients ON clients.id = sendbook.clientid 
WHERE sendbook.issueid = '29' 
AND clients.area >1000 
AND clients.area <2000 
) AS area1000, (

SELECT COUNT(sendbook.id) 
FROM sendbook 
INNER JOIN clients ON clients.id = sendbook.clientid 
WHERE sendbook.issueid = '29' 
AND clients.area >2000 
AND clients.area <3000 
) AS area2000, (

SELECT COUNT(sendbook.id) 
FROM sendbook 
INNER JOIN clients ON clients.id = sendbook.clientid 
WHERE sendbook.issueid = '29' 
AND clients.area >3000 
AND clients.area <4001 
) AS area2000 
FROM `sendbook` 
WHERE sendbook.issueid = '29' 

total num area1000 area2000 area2000 
8  438  3   3  2 

Savez-vous un moyen de simplifier cette requête? Réfléchitsimplifier cette requête

+2

ne devrait pas votre deuxième « area2000 » être nommé « area3000 »? Que se passe-t-il avec les zones 2000 et 3000 - celles-ci ne sont pas prises en compte dans votre requête, est-ce exact? quelques informations plus générales seraient bien. – oezi

Répondre

0

vous devez utiliser le cas déclaration quelque chose comme ceci:

SELECT COUNT(sendbook.id), 
(CASE 
WHEN clients.area between '1000' and '2000' THEN 1 
WHEN clients.area between '2000' and '3000' THEN 2 
WHEN clients.area between '3000' and '4000' THEN 3 
END) AS myrange FROM mytable 
GROUP BY myrange 
+0

votre cas est de 4 lignes, mais mon cas est 1 rangée – love

+0

oui mais est une requête très simple, vous avez seulement besoin de courir une petite boucle –

+0

euh ... Merci! – love

Questions connexes