常用SQL合集

1.查询表内的重复数据

select ID, count(1) from log
GROUP BY ID HAVING COUNT(1)>1

2.sql server 洗库操作,重复数据只保留一条

delete tt  from (
select ROW_NUMBER() over(partition by id  order by id desc) iid,*   from log t 
) tt where tt.iid>1

3.查询表中数据分组,只取最新的一条

SELECT
	* 
FROM
	review_note a
INNER JOIN 
( 
	SELECT resources_id ,MAX( update_time ) update_time 
	FROM demo 
	WHERE resources_id 
	IN (x,x,x,x)
	GROUP BY resources_id
) b
ON a.update_time = b.update_time
AND a.resources_id = b.resources_id
ORDER BY a.update_time DESC

4.修改表中某一字段值为另外一个关联表的字段值

UPDATE log  a 
LEFT JOIN  log2 b 
on a.id = b.aId 
SET a.name = b.name  
WHERE a.id = b.aId;

5. 查询表结构

SELECT
COLUMN_NAME 列名,
COLUMN_TYPE 数据类型,
COLUMN_COMMENT 注释
FROM
INFORMATION_SCHEMA .COLUMNS
where
table_name = '表名';

6.查询表内当前时间前N天的数据量没有的用0补上

SELECT t1.day, IFNULL(tos.count, 0) as count FROM (
    SELECT @cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) day 
    FROM (SELECT @cdate := DATE_ADD(DATE_FORMAT(SYSDATE(),'%Y-%m-%d'), INTERVAL + 1 DAY) FROM testTbale) t0
    LIMIT 8
) t1 
LEFT JOIN (
    select DATE_FORMAT(create_time,'%Y-%m-%d') day, count(*) count from (
        select * from testTbale where DATE_SUB(CURDATE(), INTERVAL 8 DAY) <= date(current_date)
    ) as take_order_statistics group by day
) tos
ON t1.day = tos.day

7.查询表内各分类及百分比

SELECT 
    model as Model,
    CONCAT(CONVERT( (COUNT(1)/(SELECT COUNT(1) FROM table_name)*100), DECIMAL(10,2) ),'%') AS 'scale'     
FROM
    table_name
WHERE 

GROUP BY      
    model

猜你喜欢

转载自blog.csdn.net/gracexiao168/article/details/127675219