2017-09-29 14 views
0

Je suis coincé sur ce pendant des heures, je suis en train de COUNT combien d'abonnés sont là dans le groupe A, Groupe B, Groupe C pour cette requête particulière:Count (Sélectionnez * Joindre) mysql requête

SELECT rh.id_subscriber, rh.bill_month, rh.bill_year, 
( 
    SELECT tbl_gen_info.gen_data_03 
    FROM tbl_subscriber 
    LEFT JOIN tbl_gen_info ON tbl_subscriber.bill_area_code = tbl_gen_info.gen_data_01 
    WHERE rh.id_subscriber = tbl_subscriber.id_subscriber 

) AS group_area 

FROM tbl_reading_head AS rh 
WHERE rh.id_soa_head IS NULL 
AND rh.read_status <> 'Beginning' 
AND rh.rec_status = 'active' 
ORDER BY rh.id_subscriber 

la sous-requête obtient la zone Groupe gen_data_03 de tbl_gen_info

les tableaux contiennent ces informations:

tbl_gen_info 
-------------------------------------------- 
| gen_category | gen_data_01 | gen_data_03 | 
-------------------------------------------- 
| Area Code | Camacho St. | Group A  | 
-------------------------------------------- 

tbl_subscriber 
---------------------------------- 
| id_subscriber | bill_area_code | 
---------------------------------- 
|  1  | Camacho St. | 
---------------------------------- 

tbl_reading_head 
---------------------------------------------------------------------- 
| id_subscriber | id_soa_head | read_status | bill_month | bill_year | 
---------------------------------------------------------------------- 
|  1  |  NULL | Metered |  10  | 2017 | 
---------------------------------------------------------------------- 

Query Result

Notez que chaque id_subscriber a deux (2) lignes (une pour l'électricité, une pour l'eau). Après regroupement par id_subscriber:

GROUP BY rh.id_subscriber 

Je suis arrivé ceci:

Result

J'ai essayé d'ajouter COUNT avant la sous-requête ce qui en fait:

COUNT(SELECT tbl_gen_info.gen_data_03 ...) AS group_area 

mais cela ne fonctionne pas .

+0

Je vais avoir du mal à suivre votre question. S'il vous plaît _edit_ votre question et montrez-nous des exemples de données pour les trois tables impliquées avec le résultat que vous attendez réellement. Je suis sûr que vous pouvez vous débarrasser de cette sous-requête désagréable dans la liste de sélection, mais nous ne le saurons pas à moins que vous ne nous montriez des données. –

Répondre

1

Utilisez un sous-requête:

SELECT rh.group_area, COUNT(*) 
FROM (SELECT rh.id_subscriber, rh.bill_month, rh.bill_year, 
      (SELECT tbl_gen_info.gen_data_03 
       FROM tbl_subscriber LEFT JOIN 
        tbl_gen_info 
        ON tbl_subscriber.bill_area_code = tbl_gen_info.gen_data_01 
      WHERE rh.id_subscriber = tbl_subscriber.id_subscriber 
      ) as group_area 
     FROM tbl_reading_head rh 
     WHERE rh.id_soa_head IS NULL AND 
      rh.read_status <> 'Beginning' AND 
      rh.rec_status = 'active' 
    ) rh 
GROUP BY rh.group_area; 
+0

Merveilleux! après quelques ajustements à votre requête, j'ai pu obtenir les résultats que je voulais. Merci beaucoup! –