0

現在、次のクエリがあります。

SELECT     
  rm.reward_name,
  rm.rewardid,
  rc.reward_code,
  rc.status,
  rc.rewardid,
  rc.add_date,
  rc.status 
from rewards_codes as rc 
INNER JOIN reward_mast as rm on rc.rewardid on rm.rewardid 
where DATE(rc.add_date) between '2012-03-16' AND '2013-03-16';

コードの総数、すべてのコードから利用可能なコード、使用されているコードを取得したい

コードステータスを区別するためにrewards_codesフィールドのステータスフィールドを取得しました

0-使用可能

1-使用されたコード

したがって、最終的な出力は次のようになります。

-----------------------------------------------------------
Reward Name     Total Codes      Available code   Used code        

my_reward       100                  40               60
extra_reward    100                  90               10
-----------------------------------------------------------

[アップデート]

これが両方の表からのサンプルデータです...

reward_mast

rewardid        rewrd_name
1               my_reward
2               extra_reward
3               test_reward

報酬_コード

codeId  rewardid    reward_code     add_date    status
1       1           aka454          2012-11-21  0
2       2           ala499          2012-04-21  0
3       1           pao789          2012-08-21  0
4       3           zlk753          2012-01-21  0
5       2           qra954          2012-05-21  0
4

1 に答える 1

1

これを試して:

SELECT 
  rm.rewardid,
  rm.reward_name,
  IFNULL(COUNT(rc.reward_code), 0) AS 'Total Codes',
  IFNULL(SUM(rc.status = 0), 0)    AS 'Available code',
  IFNULL(SUM(rc.status = 1), 0)    AS 'Used Codes'
FROM reward_mast as rm
LEFT JOIN rewards_codes as rc on rc.rewardid = rm.rewardid 
WHERE DATE(rc.add_date) between '2012-03-16' AND '2013-03-16'
GROUP BY rm.reward_name,
         rm.rewardid;

これにより、ステータスコードの各カテゴリのカウントが個別に表示TotalcodesAvailable CodesれますUsed Codes

SQLフィドルデモ

これはあなたに与えるでしょう:

| REWARDID |  REWARD_NAME | TOTAL CODES | AVAILABLE CODE | USED CODES |
-----------------------------------------------------------------------
|        1 |    my_reward |           2 |              2 |          0 |
|        2 | extra_reward |           2 |              2 |          0 |
于 2013-03-16T07:15:35.630 に答える