2017-02-16 3 views
1

У меня есть запрос, который должен отображать все данные, которые соответствуют предложению where, но, к несчастью, он отображает только 1 данные. Вот мой запрос.Отображение всех данных в MYSQL

SELECT 
    CONCAT(member.firstName, ' ', member.middleName, ' ', member.lastName) AS name, 
    (SUM(serviceapplication.memShareCap) * (60/100))      AS total_memshare, 
    COUNT(serviceapplication.servAppID)         AS total_mem, 
    serviceapplication.memShareCap           AS memsharecap 
FROM serviceapplication 
    INNER JOIN member ON member.memID = serviceapplication.applyingMember 
WHERE serviceapplication.status = 'Active' 
     AND member.memType = 'Client' 
     AND serviceapplication.CoopInfo_coopID = '1' 

Как я могу отобразить все данные?

+0

Если вы используете SUM или COUNT, вам обычно нужно использовать выражение GROUP BY, иначе оно просто подведет все ваши данные и вернет одну строку. – James

ответ

0

Поскольку вы используете агрегатные функции, то есть сумма и подсчитать, вам не хватает group by положения:

select concat (
     member.firstName, 
     ' ', 
     member.middleName, 
     ' ', 
     member.lastName 
     ) as name, 
    (SUM(serviceapplication.memShareCap) * (60/100)) as total_memshare, 
    COUNT(serviceapplication.servAppID) as total_mem, 
    serviceapplication.memShareCap as memsharecap 
from serviceapplication 
inner join member on member.memID = serviceapplication.applyingMember 
where serviceapplication.status = 'Active' 
    and member.memType = 'Client' 
    and serviceapplication.CoopInfo_coopID = '1' 
group by concat (
     member.firstName, 
     ' ', 
     member.middleName, 
     ' ', 
     member.lastName 
     ), 
    serviceapplication.memShareCap 

Если вы хотите получить итоги для всех членов в каждой строке затем использовать подзапросы:

select concat (
     member.firstName, 
     ' ', 
     member.middleName, 
     ' ', 
     member.lastName 
     ) as name, 
    (
     select SUM(serviceapplication.memShareCap) * (60/100) 
     from serviceapplication 
     inner join member on member.memID = serviceapplication.applyingMember 
     where serviceapplication.status = 'Active' 
      and member.memType = 'Client' 
      and serviceapplication.CoopInfo_coopID = '1' 
     ) as total_memshare, 
    (
     select COUNT(serviceapplication.servAppID) 
     from serviceapplication 
     inner join member on member.memID = serviceapplication.applyingMember 
     where serviceapplication.status = 'Active' 
      and member.memType = 'Client' 
      and serviceapplication.CoopInfo_coopID = '1' 
     ) as total_mem, 
    serviceapplication.memShareCap as memsharecap 
from serviceapplication 
inner join member on member.memID = serviceapplication.applyingMember 
where serviceapplication.status = 'Active' 
    and member.memType = 'Client' 
    and serviceapplication.CoopInfo_coopID = '1'; 
+0

Это почти что есть, но он должен выводить то же total_memshare во всех выбранных данных. Спасибо – Hans

+0

@Hans - что это значит? Можете ли вы предоставить примерные данные и желаемый результат в своем вопросе? – GurV

+0

Я суммировал все из столбца memShareCap, поэтому он должен иметь только одно total_memshare. Ваш запрос выводит разные total_memshare для каждого участника. – Hans

Смежные вопросы