mysql 面试查询语句累计

1,排序

假设需要查询:Select * from Table_1 where Table_1.Key in('C','A','B')
想要得到的查询结果排序为:
Row1:。。C 。。
Row2:。。A 。。
Row3:。。B 。。
也就是按照In中的顺序来排列,能否在SQL中实现?

Select * from Table_1 where Table_1.Key in('C','A','B') 
order by case Table_1.Key when 'C' then 1 when 'A' then 2 when 'B' then 3 end

 2,分组

有如下数据

国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60


按照国家和性别进行分组,得出结果如下

 

国家
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60

select  country, sum ( case when sex = '1' then population else 0 end) as 'boy',   

sum ( case when sex = '2' then population else 0 end) as 'girl'

from table_name group by country

 3,批量插入2表数据,并且使数据关联起来

--1 创建主表 
IF OBJECT_ID('Main') IS NOT NULL
BEGIN
    DROP TABLE Main
END
GO
CREATE TABLE Main(
    mainId INT PRIMARY KEY IDENTITY(1,1),
    mainName NVARCHAR(20)
)
GO
--2 创建子表 
IF OBJECT_ID('Sub') IS NOT NULL
BEGIN
    DROP TABLE Sub
END
GO
CREATE TABLE Sub(
    subId INT PRIMARY KEY IDENTITY(1,1),
    mainId INT NOT NULL,
    subName NVARCHAR(20)
)
GO
--3 创建插入数据的存储过程
IF OBJECT_ID('proc_InsertMainAndSub') IS NOT NULL
BEGIN
    DROP PROCEDURE proc_InsertMainAndSub
END
GO
CREATE PROC proc_InsertMainAndSub
AS
BEGIN
    BEGIN TRAN tran1
    BEGIN TRY
        DECLARE @mainId INT
        INSERT INTO Main VALUES ('main1')
        SELECT @mainId = @@identity
        INSERT INTO Sub VALUES (@mainId, 'sub1')
        INSERT INTO Sub VALUES (@mainId, 'sub2')
        INSERT INTO Sub VALUES (@mainId, 'sub3')
        COMMIT TRAN tran1
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN tran1
    END CATCH
END
GO

--执行存储过程
EXEC proc_InsertMainAndSub

--查看数据
SELECT * FROM Main m
SELECT * FROM Sub s

--删除测试
DROP TABLE Main
DROP TABLE Sub
DROP PROCEDURE proc_InsertMainAndSub

--having  

  select id,count(*) as counts from test group by id;

select id,count(*) as counts from test group by id having count(*)>1;

 注:

having是分组(group by)后的筛选条件,分组后的数据组内再筛选,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
where则是在分组前筛选
 

 

posted @ 2017-05-04 21:33  WilliamHu  阅读(165)  评论(0编辑  收藏  举报