简体   繁体   中英

Mysql sum of two alias_column not working

I've two tables Documents and poi_data . Documents contains two types of forms ETP and FP10 . I want to count both type of forms based on numbers and sum of two alias shown in below query. Unfortunately its not working.

Document Table (id,title ,type ,status)
poi_data Table (poi_id, doc_id, form_number, status)

SELECT 
COUNT(DISTINCT CASE WHEN documents.title LIKE '%ETP%' THEN poi_data.form_number END) AS form_count_one,
COUNT(DISTINCT CASE WHEN documents.title LIKE '%FP10%' THEN poi_data.form_number END) AS form_count_two, 
SUM(form_count_one + form_count_two) as total_form_count FROM poi_data 
LEFT JOIN documents ON (poi_data.doc_id = documents.id AND documents.status = 1) 
WHERE poi_data.pid = 781 AND poi_data.poi_id = 8
SELECT 

(COUNT(DISTINCT CASE WHEN documents.title LIKE '%ETP%' THEN poi_data.form_number END) +
COUNT(DISTINCT CASE WHEN documents.title LIKE '%FP10%' THEN poi_data.form_number END) AS total_form_count FROM poi_data 
LEFT JOIN documents ON (poi_data.doc_id = documents.id AND documents.status = 1) 
WHERE poi_data.pid = 781 AND poi_data.poi_id = 8

You dont need to use SUM because you just want count not the average or what. And then simply ad them using '+'

Just use a subquery:

SELECT form_count_one, form_count_two
       (form_count_one + form_count_two) as total_form_count 
FROM (SELECT COUNT(DISTINCT CASE WHEN d.title LIKE '%ETP%' THEN pd.form_number END) AS form_count_one,
             COUNT(DISTINCT CASE WHEN d.title LIKE '%FP10%' THEN pd.form_number END) AS form_count_two 
      FROM poi_data pd LEFT JOIN
           documents d
           ON pd.doc_id = d.id AND d.status = 1
      WHERE pd.pid = 781 AND pd.poi_id = 8
     ) d

It should be like

select SUM(form_count_one + form_count_two) as total_form_count from (SELECT 
COUNT(DISTINCT CASE WHEN documents.title LIKE '%ETP%' THEN poi_data.form_number END) AS form_count_one,
COUNT(DISTINCT CASE WHEN documents.title LIKE '%FP10%' THEN poi_data.form_number END) AS form_count_two, 
 FROM poi_data 
LEFT JOIN documents ON (poi_data.doc_id = documents.id AND documents.status = 1) 
WHERE poi_data.pid = 781 AND poi_data.poi_id = 8)alias_name

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM