--方式一
select * from A where B1 != 1 or B1 is null
--方式二
select * from A where IFNULL(B1,'') != 1
方式一
这个语句的意思是从表A中选择所有的行,其中满足以下条件之一:
列B1的值不等于1(B1 != 1)
列B1的值为空(B1 is null)
换句话说,这个查询将返回表A中列B1值不等于1或者为空的所有行。
方式二
这个语句也是从表A中选择所有的行,其中满足以下条件之一:
如果列B1的值不为null且不等于1(IFNULL(B1,'') != 1)
使用IFNULL函数,如果B1的值为null,则将其替换为空字符串'',然后判断是否不等于1。所以该查询也会返回表A中列B1值不等于1或者为空的所有行。
SELECT 单据号, 医保目录编码, 机构收费项目名称,总金额,超限价金额,IF(自付比例>=1,总金额,超限价金额) as 自费费用 FROM jsmx1
这段代码的作用是从数据表jsmx1中查询出单据号、医保目录编码、机构收费项目名称、总金额、超限价金额以及自费费用(根据自付比例计算得出),并将查询结果返回。
**SELECT
: 这个关键字指示我们要从数据表中查询哪些字段。**
单据号, 医保目录编码, 机构收费项目名称, 总金额, 超限价金额
: 这些是我们要查询的字段名。
FROM jsmx1
: 这条语句告诉我们从哪个数据表中进行查询。
IF(自付比例>=1,总金额,超限价金额) as 自费费用
: 这个是对查询结果集中的字段进行处理的部分。它使用了IF条件语句,判断自付比例是否大于等于1,如果是,则将总金额作为自费费用;否则,将超限价金额作为自费费用。as
关键字用于给处理后的结果集中的字段起一个别名"自费费用"。
SELECT device_id,university,gpa FROM user_profile WHERE (university,gpa)
IN (SELECT university,MIN(gpa) FROM user_profile GROUP BY university) ORDER BY university
这段代码的作用是从数据表user_profile
中查询出每个学校中GPA最低的记录,返回设备ID、学校名称和最低GPA,并按学校名称升序排序。
SELECT
: 这个关键字指示我们要从数据表中查询哪些字段。
device_id,university,gpa
: 这些是我们要查询的字段名。
FROM user_profile
: 这条语句告诉我们从哪个数据表中进行查询。
WHERE (university,gpa) IN (SELECT university,MIN(gpa) FROM user_profile GROUP BY university)
: 这个语句定义了过滤条件,只返回符合条件的记录。这个条件与子查询语句(SELECT university,MIN(gpa) FROM user_profile GROUP BY university)
配合使用,表示在user_profile
表中,按照university
分组,然后取每组中gpa
最小的记录,得到一个二元组(university, MIN(gpa))
的集合,接着返回user_profile
表中在这个集合里面的所有记录。这样就能保证返回的是每个学校中GPA最低的记录。
ORDER BY university
: 这个语句将结果按university
字段升序排序。
# 使用窗口函数 ROW OVER() (PARITITION BY "按那个字段" ?ORDER BY "对什么排序" )
SELECT device_id,university,gpa FROM (SELECT device_id,university,gpa,(RANK() over (PARTITION BY university ORDER BY gpa )) as m ?FROM user_profile) AS A ? WHERE A.m=1
这段代码的作用是使用窗口函数对数据表user_profile
中按学校分组并按GPA排序的数据进行排名,然后返回每个学校中GPA最低的记录,返回设备ID、学校名称和最低GPA。
SELECT
: 这个关键字指示我们要从数据表中查询哪些字段。
device_id,university,gpa
: 这些是我们要查询的字段名。
FROM
: 这条语句告诉我们从哪个数据表中进行查询。在这里,它是一个子查询(SELECT device_id,university,gpa,(RANK() over (PARTITION BY university ORDER BY gpa )) as m FROM user_profile) AS A
,用于给每个学校中的记录进行排名。
(RANK() over (PARTITION BY university ORDER BY gpa )) as m
: 这段代码是使用窗口函数RANK()
对university
字段相同的记录进行排名,PARTITION BY university
表示按照university
字段进行分组,ORDER BY gpa
表示按照gpa
字段进行排序,最后将排名结果保存到别名为m
的新列中。
WHERE A.m=1
: 这个条件用于过滤排名为1的记录,即每个学校中GPA最低的记录。
SELECT age_range,count(*) FROM
(SELECT IF(IFNULL(age,0)>=25,"25岁及以上","25岁以下") as age_range,device_id FROM user_profile) AS user_profile
GROUP BY age_range
这段代码的作用是对数据表user_profile
中的用户按照年龄进行分组统计,并返回每个年龄范围的记录数。年龄范围划分为"25岁及以上"和"25岁以下"两个范围。
SELECT
: 这个关键字指示我们要从数据表中查询哪些字段。
age_range,count(*)
: 这些是我们要查询的字段名。age_range
是根据用户的年龄划分的范围,count(*)
是对每个年龄范围的记录数进行统计。
FROM
: 这条语句告诉我们从哪个数据表中进行查询。在这里,它是一个子查询(SELECT IF(IFNULL(age,0)>=25,"25岁及以上","25岁以下") as age_range,device_id FROM user_profile) AS user_profile
,用于对用户的年龄进行判断并选择相应的年龄范围。
IF(IFNULL(age,0)>=25,"25岁及以上","25岁以下") as age_range
: 这段代码使用IF函数和IFNULL函数判断用户的年龄是否大于等于25岁,如果是,则返回"25岁及以上",否则返回"25岁以下"。这样就将用户的年龄划分为两个范围。
GROUP BY age_range
: 这个语句对查询结果按照age_range
字段进行分组,将相同年龄范围的记录放在一起。
count(*)
: 这个语句用于统计每个年龄范围的记录数。
SELECT device_id,gender,
CASE
WHEN age<20 then '20岁以下'
WHEN age<25 then '20-24岁'
WHEN age>=25 then '25岁及以上'
else '其他'
END as age_cunt
FROM user_profile
这段代码的作用是获取数据表user_profile
中的设备ID、性别和年龄信息,并将用户的年龄划分为四个范围:"20岁以下"、"20-24岁"、"25岁及以上"和"其他"。
SELECT
: 这个关键字指示我们要从数据表中查询哪些字段。
device_id,gender,CASE...END as age_cunt
: 这些是我们要查询的字段名。device_id
是设备ID,gender
是性别,age_cunt
是根据用户年龄划分的范围。
FROM
: 这条语句告诉我们从哪个数据表中进行查询。在这里,它是数据表user_profile
,用于获取用户的设备ID、性别和年龄信息。
CASE...END as age_cunt
: 这段代码是使用CASE语句对用户的年龄进行分类。当用户的年龄小于20岁时,返回"20岁以下";当用户的年龄在20到24岁之间时,返回"20-24岁";当用户的年龄大于等于25岁时,返回"25岁及以上";否则返回"其他"。
WHEN...then...
: 这些是CASE语句的条件和结果。当满足条件时,会返回对应的结果。
ELSE
: 当所有条件都不满足时,返回ELSE后面指定的结果。
END
: CASE语句结束标志。