2017-09-25 64 views
-1

我的代码示例获取total totalstamp,我需要激活和不激活。我的标记表有CURRENT_STATUS行活动和非活动通过mysql计算总数,活动和非活动数据

SELECT r.* 
    , COUNT(s.current_status) total_stamp 
    FROM tbl_registers r 
    LEFT 
    JOIN tbl_stamps s 
    ON r.register_id = s.register_id 
WHERE r.ins_id = 1 
GROUP 
    BY r.register_id 
ORDER BY r.register_name_en ASC 
    , s.stamp_name_en ASC 

enter image description here

电流输出一样,我需要另一个更列线一个是total_active另一个是不活动的总单查询。

+0

如何检查记录是否处于活动状态?你正在寻找另外两列,对吗? – 0x11

+0

是的,我正在寻找两个额外的列。在数量5即2是活跃的,3是无效已经在第二个表中有current_status列名 –

+1

未来的参考阅读此:http://meta.stackoverflow.com/a/271056/ –

回答

2
SELECT r.*, 
     COUNT(s.current_status), 
     SUM(current_status='something meaning active') active, 
     SUM(current_status='something meaning inactive') inactive, 
     ... 

应该做的伎俩。为什么?因为在MySQL中current_status='something meaning inactive'等表达式的值为0意味着错误,或者1表示为真。所以SUM()加上了真实项目的数量。

+0

我的答案有很多猜测因为你的问题不完整。 –

+0

我不知道你可以做到这一点。这很酷。 – 0x11

0

我认为最好的办法是将您的LEFT JOIN分成两个单独的LEFT JOINS。一到活动的桌子和另一个不活动的桌子。这样你就可以将三个分开。那有意义吗?类似这样的:

SELECT r.*, sActive.total + sInactive.total as total_stamp, sActive.total as active_stamp, sInactive.total as inactive_stamp 
FROM tbl_registers as r 
LEFT JOIN (
    SELECT register_id, COUNT(*) as total 
    FROM tbl_stamps 
    WHERE s.current_status = 'active' 
    GROUP BY register_id 
) as sActive ON sActive.register_id = r.register_id 
LEFT JOIN (
    SELECT register_id, COUNT(*) as total 
    FROM tbl_stamps 
    WHERE s.current_status = 'inactive' 
    GROUP BY register_id 
) as sInactive ON sInactive.register_id = r.register_id 
GROUP BY r.register_id 
+0

你还这么想吗? – Strawberry

+0

不显示错误信息 –