ms sql-MS SQL 分组查询的疑问。

问题描述

MS SQL 分组查询的疑问。

我突然间对数据库的分组查询好像忘得差不多了,也突然变得不太理解。(解决问题)


如,表结构:
Table Name:TEST

ID  name    sex(bit)    area
-----------------------------
1    mr.a       1      CN
2    mr.b       1      USA
3    mr.c       1      CN
4    mr.d       0      USA
5    mr.e       0       JP
6    mr.f        1      USA
-----------------------------
GROUP 如何查询才能得到这样的结果?

area      people    boy    girl
-------------------------------
CN           2            2        0
USA         3            2        1
JP            1             0        1
----------------------------------
我一直想不透要怎么做才能得到这样的数据

解决方案

select count(*) from xxx group by area

如果还要区分男女,可以用嵌套select或者case when

解决方案二:

sql分组查询
SQL分组查询
SQL根据某个字段分组查询:

解决方案三:

大致上是这样的

select area,sum(name) as people ,sum(case when sex=1 then 1 else 0 end ) as boy,sum(case when sex=0 then 1 else 0 end ) as boy from test group by area
你可以试试

解决方案四:

 DECLARE @t TABLE (
    Id INT IDENTITY(1,1),
    NAME NVARCHAR(50),
    sex BIT,
    area VARCHAR(20)
)
INSERT INTO @t (NAME,sex,area) VALUES('mr.a',1,'CN')
INSERT INTO @t (NAME,sex,area) VALUES('mr.b',1,'USA')
INSERT INTO @t (NAME,sex,area) VALUES('mr.c',1,'CN')
INSERT INTO @t (NAME,sex,area) VALUES('mr.d',0,'USA')
INSERT INTO @t (NAME,sex,area) VALUES('mr.e',0,'JP')
INSERT INTO @t (NAME,sex,area) VALUES('mr.f',1,'USA')

SELECT area
    , COUNT(1) AS people
    , SUM(CASE WHEN sex=1 THEN 1 ELSE 0 END) AS boy
    , SUM(CASE WHEN sex=0 THEN 1 ELSE 0 END) AS girl
FROM @t GROUP BY area
ORDER BY area
/*
area    people  boy   girl
CN      2       2     0
JP      1       0     1
USA     3       2     1
*/

时间: 2024-08-03 18:01:31

ms sql-MS SQL 分组查询的疑问。的相关文章

java-一个纠结的sql分组查询语句

问题描述 一个纠结的sql分组查询语句 是这样的 数据库里有一张 宿舍用电表(宿舍号,时间,电表度数) dormitoryElectric(dormitory,time,electric) 里面存的是每个小时电表上的度数,那我想查询所有宿舍近7天的每天用电度数要怎么写. 效果大概是这样的: 宿舍1 第一天用电度数 第二天用电度数 第三天用电度数 ... 宿舍2 第一天用电度数 第二天用电度数 第三天用电度数 ... 第二天用电度数应该是第二天的最后一次电表度数减去第一天的最后一次电表度数 解决方

sql server 按日期分组查询

问题描述 sql server 按日期分组查询 各位 大侠,请问这个我弄错了吗,有个字段payment_time,时间格式2015-12-23 19:16:07 ,我要查询把后面时间去掉,变成2015-12-23 这个格式,然后统计每天id数量,我在网上搜索到下面的这个转换日期的代码,我自己添加的count(id),但是不知道为什么不是我想要的结果,哪里不对吗? SELECT substring(Convert(VARCHAR(30), payment_time, 120),1,10) as 日

sql server 2008分组后如何实现分页查询

问题描述 sql server 2008分组后如何实现分页查询 我的SQL语句是这样的 select left(loginDate,10) ,skipUrl,count(loginDate) FROM loginlog group by skipUrl,left(loginDate,10) order by left(loginDate,10) desc 我自己试了很多总方式都不对的,不知道问题出在哪里的了?希望大侠帮忙解决下的了谢谢! select top 10 left(loginDate,

sql 对相对数据进行分组查询语句

sql 对相对数据进行分组查询语句 /* | section | province | area   | zone | postcode | cardtype                 | telco  | | 1879728 | 青海      | 共和         | 0974 | 813000   | 移动187卡                   | 移动   | | 1879741 | 湖南      | 长沙         | 0731 | 410000   | 移动1

查询多层节点-SQL多层节点的查询问题

问题描述 SQL多层节点的查询问题 如果上一层节点单价不为0,则查询结果不要它下面的所有字节点;否则就要保留下层节点,结果如下图: 解决方案 我觉得需要递归,只靠一个语句好像实现不了 解决方案二: 你的数据库是MS SQL SERVER 2005级以上的吗?如果是的话,可以使用CTE递归查询 解决方案三: 数据库是SQL2000 解决方案四: SQL查询多级节点方法

用SQL进行单表查询

  单表查询是相对多表查询而言的,指从一个数据表中查询数据.4.2.1 查询所有的记录    在[命令编辑区]执行输入"select * from scott.emp",然后单击[执行]按钮,出现如图4.3所示的emp数据表所有记录.    [参见光盘文件]:\第4章\4.2\421.sql.    select * from 数据表,这里的"*"代表数据表中所有的字段.4.2.2 查询所有记录的某些字段    在[命令编辑区]输入"select empn

sql 视图与直接查询的效率那个快 视图第二次查询速度与第一次查询速度是否有差别 等等

问题描述 sql 视图与直接查询的效率那个快 视图第二次查询速度与第一次查询速度是否有差别 等等 先说一下问这个问题的原因 刚接触数据库不到一年 视图这里疑问多多 跪求大牛讲解 问题如下 1 . 在同等查询语句的情况下视图的查询速度快 还是 效率一样 2. 一个视图在同等查询条件下 第一次查询的速度与第二次查询的速度是否有区别 3.一个索引视图与一个普通视图在不做其他运算的情况下 即select * from 视图 这种情况 效率是否有区别 解决方案 视图的效率略微高一些,毕竟不需要sql解析编

SQL Server执行逻辑查询时,SQL被解析的步骤

以下这段对SQL Server执行逻辑查询时,SQL被解析的步骤.摘自<SQL Server 2005技术内幕 T-SQL查询>.这是一本非常好的讲解SQL Server的书,整个SQL Server 2005技术内幕系列都是,个人强烈推荐. 我一直认为,学好任何一种技术,没有什么比学好它的基础知识和底层原理更重要.如果你相信有"捷径",那么这就是唯一的"捷径".了解这些,有助于你更快地掌握技术最本质的核心. 我真希望早点看到那些好书,也希望看到这篇文章

详解SQL Server的简单查询语句_MsSql

前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开始正式步入学习SQL中简单的查询语句,简短的内容,深入的理解. 简单查询语句 所有复杂的语句都是由简单的语句组成基本都是由SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY等组成,当然还包括一些谓词等等.比如当我们要查询某表中所有数据时我们会像如下进行. SELECT