2017-02-16 116 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