【问题标题】:MYSQL Inner join with select statementMYSQL 内连接与 select 语句
【发布时间】:2013-03-16 07:11:33
【问题描述】:

现在我有以下查询:

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

rewards_codes

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

【问题讨论】:

    标签: mysql sql join sum inner-join


    【解决方案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 CodesUsed Codes

    SQL Fiddle Demo

    这会给你:

    | REWARDID |  REWARD_NAME | TOTAL CODES | AVAILABLE CODE | USED CODES |
    -----------------------------------------------------------------------
    |        1 |    my_reward |           2 |              2 |          0 |
    |        2 | extra_reward |           2 |              2 |          0 |
    

    【讨论】:

    • 感谢您的回答,我已经检查过它是否为可用代码和总代码提供了正确的 OP,我已经检查了用于个人奖励的使用代码没有用于奖励的单个代码仍然显示 1 个使用代码.. ..
    • @MarkMartin - 好的,抱歉,使用 LEFT JOIN 查看我的编辑。您能否从rewards_codesreward_mast 这两个表中添加一些示例数据,这将非常有助于解释问题。
    • @MarkMartin - 好的,我也很抱歉迟到了。查看我的编辑我修复了我的查询,它应该可以正常工作,注意它不会给你所有的名字,因为 where 子句删除了那个条件,它会给你所有的行。 like in this demo。你怎么看?
    • status=1 没有记录,但对于某些记录,它仍将使用的代码返回为 1...
    • @MarkMartin - 它应该可以正常工作,它可能是其他地方的另一个问题。它在演示中运行良好。在演示中没有Used Codes 它是0,它工作正常。您能否发布您尝试过的确切查询?也尝试编辑这个demo 解释这个问题?
    猜你喜欢
    • 2011-09-18
    • 2011-11-03
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多