过多繁琐的sql影响代码质量,及维护成本,以下为两种小技巧处理方式,仅供参考。
第一种,用case ---when---方法
select id
,sum(case when type in (1,2) then [count] else 0 end) as sum1
,sum(case when type in (3) then [count] else 0 end) as sum2
,sum(case when type in (4,5) then [count] else 0 end) as sum3
from 表名
group by id
第二种,if 判断
SELECT SUM( goods_amount ) AS money,
count( * ) AS num,
count(if(pay_status=1,true,null)) AS success,
count(if(pay_status=2,true,null)) AS fall
FROM `tab_order_info`
WHERE user_id = 11
意思和count(*)或者count(column)是一样的
COUNT() 函数返回匹配指定条件的行数。
(1). SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_nameSQL
(2). COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_nameSQL
(3). COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
扩展资料:
SQL 实例
现在,我们希望计算 "Orders" 表中不同客户的数目。
我们使用如下 SQL 语句:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders结果集类似这样:
这是 "Orders" 表中不同客户(Bush, Carter 和 Adams)的数目。
a列有多少元素?你的意思应该是a列有多少个不同的元素吧?null算吗?如果null不算,那么count(distinct a)就可以。如果null算,那么就要先看看有没有null有的话就+1,具体的做法各个数据库写法上也会有所区别,这个就不写了。如果要比较三张表,那么就需要交并补,那么就需要用到union等语句关联的写法,各个数据库也并不完全一致,根据数据库选择。
如元素要列出来,那么直接distinct a 这样就直接列出来了。
如果要知道每个元素的出现的次数,那么就需要分组count了,a count(a)group by a
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)