sql - 查询过滤列与同一表中的其他列
问题描述
像这样的表:
create_adte info close_date
-------------------------------------------
2018-10-05 DTS2018100500723 2018-10-23
2018-10-30 DTS2018103001638 2018-10-05
2019-03-01 DTS2019030102931 2018-10-05
2018-10-05 DTS2019030105944 2019-05-18
2018-10-05 DTS2019030108602 2019-05-29
我想在一天内创建 num 并关闭 num
如上:2018-10-05创建3条记录,2018-10-05关闭2条记录,不是在同一天创建和关闭
我试过这样,但它不起作用
select a.create_date,count(a.create_date) as new_dts_num,countIf(a.create_date=b.close_date)
from dts a,dts b
group by a.create_date
order by new_dts_num desc
解决方案
我很确定您已经知道,但这countif
不是有效的 SQL 命令。我认为处理这个问题的正常方法是使用Case
withSum
语句。你也不想加入(如果你想加入的话,你会想......加入,你所做的就是将每一行加入到每一行)。所以像:
select create_date,count(create_date) as new_dts_num ,
sum(case when created_date = close_date then 1 else 0 end) as dts_same
from dts
group by create_date
order by new_dts_num desc
这会重现您正在尝试做的事情。你解释的有点不同。如果您只想要它们相同的行(这就是您解释它的方式),那么不需要所有计数/等,只需将其作为 where 子句的一部分:
select create_date,count(*) as new_dts_num
from dts
where create_date = close_date
group by create_date
order by new_dts_num desc
推荐阅读
- python - findall 在字符串上的问题(预期的字符串或类似字节的对象)
- javascript - 如何使用 if、else if 和 else 语句来验证两个字符串
- graphql - 如何使用变量更新graphql中的条目
- css - 带 1 个圆边的矩形
- javascript - 我怎样才能找到数组中的平均值
- node.js - 如何在 AWS lambda 上使用 graphql 'isValidJSValue' 或 'coerceValue'?
- facebook - 无法将 Spark AR 效果上传到 Instagram
- javascript - 如何使用 isHidden 仅在移动设备上隐藏项目
- python - 当我尝试从 pycuda 运行模块时,出现错误:“没有名为 'pycuda._driver' 的模块”
- html - 我需要文本随着网站大小的变化而移动(我需要它来响应网站)