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‘我有罪,我忘记了二月:),但想法是这样的