Sql 对同一列进行不同条件统计(条件筛选)

11 篇文章 0 订阅

1. PostgreSql

当发现可以进行筛选时,语句如下:

SELECT
	count(*) filter (where PERIOD = '01')  AS business_daily, -- 日累计 业务办理
	count(*) filter (where PERIOD = '02')  AS business_per_month -- 月累计 业务办理
FROM
	`k_id_idx` as ki
WHERE idx_code = 'GD010'

2. Mysql

可是上面的 count filter 语句并不能使用在 mysql 中,但是 count 函数和 if 函数结合可以达到同样的效果,语句如下:

count() 函数
统计数据表中的行的总数,忽略空值

if(expr, v1, v2) 函数
if(expr, v1, v2) 表达式expr为true (expr<>0 and expr <> NULL) 返回v1,否则v2

SELECT
	count(if(PERIOD = '01', pid, null)),
	count(DISTINCT if(PERIOD = '02', pid, null)) -- 如果返回字段结果不唯一的话,可加上 DISTINCT 去掉重复字段再统计,这里用 1 来标记的话,不可用 DISTINCT;
FROM `k_id_idx`
WHERE idx_code = '010'

根据原理,可使用 sum 函数加上 if 函数,用 1 来标记累加,效果相同;(用 1 标记,count/sum 不可用 DISTINCT 去重)

SELECT
	sum(if(PERIOD = '01', 1, 0)),
	sum(if(PERIOD = '02', 1, 0)) -- 如果存在累加 1 ,没有累加 0;
FROM `k_id_idx`
WHERE idx_code = '010'

3. Oracle

  1. case when 语句:
select
	sum(case u.sex when 1 then 1 else 0 end) as '男性',
	sum(case u.sex when 2 then 1 else 0 end) as '女性',
	sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end) as '性别为空'
from users u;
-- 或者
select
	sum(case u.sex when 1 then 1 end) as '男性',
	sum(case u.sex when 2 then 1 end) as '女性',
	sum(case when u.sex <>1 and u.sex<>2 then 1 end) as '性别为空'
from users u;
  1. case when 字典替换功能:
select u.id,u.name,
	(case u.sex
		when 1 then '男'
		when 2 then '女'
		else '空的'
		end
	) as '性别'
from users u;

(完)

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 假设你有一个名为Sales的表,其中包含每个销售事务的日期和销售金额。你可以使用以下SQL查询语句来对每日销售金额进行统计: ``` SELECT DATEADD(dd, DATEDIFF(dd, 0, SaleDate), 0) AS SaleDay, SUM(SaleAmount) AS TotalSales FROM Sales GROUP BY DATEADD(dd, DATEDIFF(dd, 0, SaleDate), 0) ``` 这个查询语句将SaleDate的日期部分截断,然后对每个唯一的SaleDay值计算销售总额。结果将返回每个销售日的销售总额。 ### 回答2: SQL Server可以通过使用聚合函数和日期函数来对每日销售金额进行统计。 首先,我们需要有一个包含销售数据的表,其中包括销售日期和销售金额等字段。假设该表名为"sales",其中包含字段"sales_date"和"amount"。我们可以使用以下SQL语句来创建该表: ``` CREATE TABLE sales ( sales_date DATE, amount DECIMAL(10,2) ); ``` 接下来,我们可以使用以下SQL语句来计算每日销售金额的统计值: ``` SELECT sales_date, SUM(amount) AS total_amount FROM sales GROUP BY sales_date; ``` 上述语句中的"SELECT"子句选择了"sales_date"和"SUM(amount)",分别表示日期和每日销售金额的总和。"FROM"子句指定了数据来源表为"sales"。"GROUP BY"子句用于按照日期对数据进行分组。 执行以上SQL查询后,将会返回每个售卖日期以及对应的销售金额总和。 ### 回答3: SQL Server可以通过编写相关的查询语句对每日销售金额进行统计。以下是一个简单的查询示例: ```sql SELECT DATEPART(YEAR, OrderDate) AS [年份], DATEPART(MONTH, OrderDate) AS [月份], DATEPART(DAY, OrderDate) AS [日期], SUM(OrderAmount) AS [销售金额] FROM SalesTable GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate), DATEPART(DAY, OrderDate) ORDER BY [年份], [月份], [日期] ``` 这个查询使用了DATEPART函数来提取订单日期的年份、月份和日期,然后使用SUM函数计算每一天的订单总金额。最后,使用GROUP BY对结果进行分组,并按照年份、月份和日期的顺序进行排序。 以上查询将返回一个结果集,其中包含每天的销售金额。可以根据实际情况进行进一步的修改,例如加入WHERE条件筛选特定日期范围的数据,或者连接其他表来获取更多相关信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值