我想在一个名为table\u name
的表中计算名为value
的同一列:
CREATE TABLE IF NOT EXISTS Table_Name(
Code VARCHAR(20) COMMENT 'Code',
Date COMMENT 'Date',
Value DECIMAL(25,2) COMMENT 'Value',
Remark STRING COMMENT 'Value type, "111, 222, or 333 etc"',
假设我需要在20180201和20180228之间计算“(值的类型=111或222或333)/(值的类型=444)”,我使用SQL查询如下:
select t.code,t.date,t.remark,t1.value/t2.value as val
from table_name t
right join (
select sum(t.value) fzqsz, t.code from table_name t
WHERE remark = '111' OR remark = '222' OR remark = '333'
group by t.code,t.date
) t1 on t.code = t1.code
left join (
select sum(t.value) value,t.code from table_name t
WHERE remark = '444'
group by t.code,t.date
) t2 on t1.code = t2.code
-- if I put below line in `SQL query` I get nothing(0 results)
-- where t.code='00001' and t.date >='20180201' and date <= '20180228'
我只选择了备注=“111或222或333”,我不知道为什么会出现所有备注(“555和666”),我得到的结果如下:
code date remark val
1 00001 2018-02-25 00:00:00.0 111 0.00002929
2 00001 2018-02-25 00:00:00.0 222 0.00002977
3 00002 2018-02-25 00:00:00.0 333 0.00002917
4 00003 2018-02-25 00:00:00.0 444 0.00002987
3 00001 2018-02-25 00:00:00.0 555 0.00002917
4 00002 2018-02-25 00:00:00.0 666 0.00002987
SQL查询正确吗?我确信我的SQL查询有问题。非常感谢您的建议。
艾尔莎,你只对答案做出反应是没有意义的。这两张海报只是猜测你可能想要实现什么。在你的要求下有一些问题,你到目前为止还没有做出反应。您使用的真的是Oracle吗?表的键是什么(即,什么唯一地标识一行)?为什么在子查询中按日期分组?您希望得到什么样的结果行?
由于你似乎没有阅读评论,我已经发布了这个作为回答。
您可以使用select case,而不是合并相同的表。
select t2.code, t2.date, t2.remark, t3.val/t3.val2 from
table_name t2
inner join (
select t.code, sum(case when t.remark in ('111', '222', '333') then 1 else 0 end) as val
, sum(case when t.remark in ('444') then 1 else 0 end) as val2
from table_name t
where t.code = '00001' and t.date between '20180201' and '20180228'
group by t.code) t3 on t3.code = t2.code
where t2.remark in ('111', '222', '333', '444')
使用内部连接和多个或
可以在
select t.code,t.date,t.remark,t1.value/t2.value as val
from table_name t
join (
select sum(t.value) fzqsz, t.code from table_name t
WHERE remark in( '111','222' ,'333')
group by t.code,t.date
) t1 on t.code = t1.code
join (
select sum(t.value) value,t.code from table_name t
WHERE remark = '444'
group by t.code,t.date
) t2 on t1.code = t2.code
where t.code='00001' and t.date >='20180201' and date <= '20180228'
您可以在以下情况下使用case:
select (sum(case when remark in( 111,222 ,333) then t.value else 0 end)/
sum(case when remark=444 then t.value else 0 end)) as val,
t.code,t.date from table_name t
where t.code='00001' and t.date >='20180201' and date <= '20180228'
group by t.code,t.date
问题内容: 我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。 例如,我有此表: 我需要查询一个结果: 1.名为“约翰”的人数 2.年龄超过30岁的“约翰”的人数。 我可以通过这种方式对子查询进行操作(这只是示例): 但这非常慢,我正在寻找更快的方法。 与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数? 问题答案: 使用CASE语句,您
问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果
问题内容: 我想使用查询显示来自不同行的两个值。 这是表结构: 我想从日期2014-11-07减去日期2014-11-08。 输出应该像 问题答案: 您可以使用联接获取行,然后减去值:
问题内容: 假设我具有以下表格结构: 是否可以运行单个查询以结合以下两个条件: 此人正在关注多少用户 从t1 WHERE userID_follower =“。$ myID”中选择COUNT(id)。。” 有多少用户关注此人 从t1 WHERE userID_following =“。$ myID”中选择COUNT(id)。 谢谢。 问题答案: 在MySql中,您可以在条件上使用该函数,因为错误条
问题内容: 有没有一种方法可以查询数据库以找出所有表中有多少行? IE 希望你能指教 问题答案: