mysql 语法进阶


根据不同的条件求不同条件下的字段的count

如下:如何把下面这三条查询count的语句用一条sql语句实现显示

SELECT count(1) FROM tb_account where name='李亚楠';
SELECT count(1) FROM tb_account where name='黄桂燕';
SELECT count(1) FROM tb_account where name='牧丹丹';

解:

SELECT
    sum(
        IF (
            (name = '李亚楠'),1,0) 
    ) "count1", 
    sum(
        IF ((name ='黄桂燕'),1,0)
    ) "count2", 
    sum(
        IF ((name = '牧丹丹'),1,0)
    ) "count3" 
FROM
    tb_account

根据不同的条件求不同条件下的字段条数的sum

如下:如何把下面这三条查询sum的语句用一条sql语句实现显示

SELECT sum(is_wx_state) FROM tb_account where name='李亚楠';
SELECT sum(is_wx_state) FROM tb_account where name='黄桂燕';
SELECT sum(is_wx_state) FROM tb_account where name='牧丹丹';

解:

SELECT
    sum(
        IF (
            (name = '李亚楠'),is_wx_state,0) 
    ) "sum1", 
    sum(
        IF ((name ='黄桂燕'), is_wx_state, 0)
    ) "sum2", 
    sum(
        IF ((name = '牧丹丹'),is_wx_state,0)
    ) "sum3" 
FROM
    tb_account

如何查询数据库里逗号拼接的值

原数据:
在这里插入图片描述
查询语句:

SELECT
	* 
FROM
	tb_anpin_plan 
WHERE
	find_in_set( '清洁作业', business_type )
	SELECT business_type FROM tb_anpin_plan

查询后效果图:
在这里插入图片描述

查询某字段中以逗号分隔的字符串的关联查询实现

关联表1数据:

在这里插入图片描述
关联表2数据:

在这里插入图片描述
把表1的res_id字段跟表2的resid字段进行关联查询:
查询语句:

	select a.res_id,b.* from tb_enterprise_we_chat_external_house a LEFT JOIN ost_house b ON FIND_IN_SET(b.resid,a.res_id)  where a.id = 252660	

查询后效果图:
在这里插入图片描述

如何查询数据库里字符串字段里的数组类型的值

值为数值类型的数组的查询

原数据:
在这里插入图片描述

查询语句:

SELECT
	* 
FROM
	tb_account 
WHERE
	JSON_CONTAINS(
		role_ids,
	JSON_ARRAY( 45 ))

查询后效果图:

在这里插入图片描述

值为字符串类型的数组的查询

原数据:

在这里插入图片描述

查询语句:

SELECT
	org_ids 
FROM
	tb_account 
WHERE
	JSON_CONTAINS(
		org_ids,
	JSON_ARRAY('Y000000445'))

查询后效果图:

在这里插入图片描述

根据不同的条件update不同的字段值

UPDATE:后面是表名
SET:后面是你要修改的字段名
WHEN:后面是条件
THEN:后面是满足条件要修改为的值

plan_start_date,plan_start_date 是时间字段,CURDATE()是时间函数

UPDATE tb_anpin_plan 
SET plan_state =(
	CASE
			WHEN CURDATE()< plan_start_date THEN 0 
			WHEN plan_start_date <= CURDATE() AND CURDATE()<= plan_end_date THEN 1 
			WHEN CURDATE()> plan_end_date THEN 2 
			END 
			) 
		WHERE
			state =1

order by 多个字段及其多字段排序

update_time字段:时间类型
role_value字段:数值类型

先用update_time降序,然后在用role_value降序

SELECT
	update_time,
	role_value 
FROM
	`tb_account` 
ORDER BY
	update_time DESC,
	role_value DESC;

先role_value升序,然后在用update_time降序

SELECT
	role_value,
	update_time 
FROM
	`tb_account` 
ORDER BY
	role_value ASC,
	update_time DESC;

group_concat()将字段的值进行拼接

原数据:
在这里插入图片描述

拼接后数据查询:

SELECT
	group_concat( point_ids ) pointIds 
FROM
	tb_polling_plan

查询后效果图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值