2017-09-25 12 views
-1

合計total_stampを取得するためのコードサンプル。アクティブで非アクティブである必要があります。マイスタンプ台ような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

アクティブおよび非アクティブ電流出力のためCURRENT_STATUS行を持って、私は他の多くの列線を必要とするものであるtotal_active別の単一のクエリと非アクティブの合計です。

+0

レコードがアクティブか非アクティブかをチェックするにはどうすればよいですか?そして2つの追加の列を探していますか? – 0x11

+0

はい私は2つの追加の列を探しています。金額5で2がアクティブであり、3が非アクティブで、すでに2番目のテーブルに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を2つの別々のLEFT JOINSに分割することです。 1つはアクティブなテーブルに、もう1つは非アクティブになります。この方法で3つを別々に合計することができます。それは理にかなっていますか?このようなもの:

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

いいえ、間違った情報を表示する –

関連する問題