Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何创建具有条件的查询?_Mysql_Sql - Fatal编程技术网

Mysql 如何创建具有条件的查询?

Mysql 如何创建具有条件的查询?,mysql,sql,Mysql,Sql,我试图在数组中放入一个条件 我想要 if policy.date_ini >= insurance.initial_date do sum of all net_ensurance where date_ini >= initial_date end 桌子 |policies| |id| |date_ini| |num_policy| 1 2013-02-30 1234 |insurances|

我试图在数组中放入一个条件

我想要

   if policy.date_ini >= insurance.initial_date do
      sum of all net_ensurance where date_ini >= initial_date
   end
桌子

   |policies|
     |id|   |date_ini|  |num_policy|
      1      2013-02-30      1234

   |insurances|
     |id|  |policy_id|   |initial_date|   |net_ensurance|
      1       1            2013-03-30         1000
      2       1            2013-02-30         2000 
      3       1            2012-12-05         5000
我应该

      |num_policy|  |sum_net_ensurance|
        1234                 3000
注: 我在数据库中的关系如下:

 class Policy < ActiveRecord::Base
    has_many :insurances
 end

 class Insurance < ActiveRecord::Base
    belongs_to :policy
 end
类策略
我想你有点困惑。您要求的是保单日期>=初始日期时的净额总和

首先,
2013-02-30
不是有效日期。二月只有28天 编辑:是否将其存储为varchar列?那真是个坏主意

因此,我将其替换为
2013-02-28
接下来,您真的是指保单日期大于初始日期的位置吗?如果是这样,那么每行都是这样,因此您将返回
7000。

SELECT num_policy,
sum(CASE WHEN p.date_ini >= i.initial_date
THEN ( net_ensurance) ELSE 0 END) FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id
结果:

NUM_POLICY  SUM_NET_ESURANCE
1234        7000

enter code here
NUM_POLICY  SUM_NET_ESURANCE
1234        3000
如果你的意思是相反的,你会得到你期望的3000英镑:

SELECT num_policy,
sum(CASE WHEN  i.initial_date >= p.date_ini
THEN ( net_ensurance) ELSE 0 END) FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id
结果:

NUM_POLICY  SUM_NET_ESURANCE
1234        7000

enter code here
NUM_POLICY  SUM_NET_ESURANCE
1234        3000

我使用了你的代码,我得到了:“#1054-字段列表中的未知列‘I.net’保险”我使用了你的代码,我得到了=>字段列表中的未知列‘policy.date’ini‘我有罪,我忘记了二月:),但想法是这样的