sql根据多字段分组并查询每组内top1

1.如下表格,查询2017年Q1季度的从a_country发往其他城市的货量最高的公司,并输出货量总和

id
from_country
to_country
company_name
company_count
year
quarter
month
               
SELECT  * FROM(

	SELECT  sum(company_count) as top_count,company_name
	FROM testData
	WHERE `year`=‘2017‘ AND `quarter`=‘Q1‘ AND from_country=‘a_country‘
	GROUP BY from_country,to_country,company_name,`year`,`quarter`
	ORDER BY company_count DESC) AS A

GROUP BY from_country,to_country

2.条件同1,同时查询公司b

SELECT * FROM

	(SELECT  * FROM(

		SELECT  sum(company_count) as top_count,company_name,company_count
		FROM testData
		WHERE `year`=‘2017‘ AND `quarter`=‘Q1‘
		GROUP BY from_country,to_country,company_name,`year`,`quarter`
		ORDER BY company_count DESC) AS A

	GROUP BY from_country,to_country) AS TopCompany

	INNER JOIN

	(SELECT  B_count,to_country FROM(

		SELECT  sum(company_count) as B_count,company_name as B,to_country
		FROM testData
		WHERE `year`=‘2017‘ AND `quarter`=‘Q1‘  AND company_name=‘B‘
		GROUP BY from_country,to_country,company_name,`year`,`quarter`
		ORDER BY company_count DESC) AS Bdata

	GROUP BY origin_country_name,dest_country_name) AS BCompany

ON TopCompany.to_country =BCompany.to_country

  

原文地址:https://www.cnblogs.com/mufire/p/9534226.html

时间: 2024-10-27 19:21:58

sql根据多字段分组并查询每组内top1的相关文章

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算等

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法 今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很不错,在此记录分享下: row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算

sql 多个字段分组,删除重复记录,保留ID最小的一条

IF OBJECT_ID('cardDetail') IS NOT NULL DROP TABLE cardDetail CREATE TABLE cardDetail ( id INT IDENTITY(1,1) PRIMARY KEY, cardNO VARCHAR(8), NAME VARCHAR(30), idCard VARCHAR(18), cardState CHAR(1)--卡片状态 1正常 2注销 ) INSERT cardDetail(cardNO,NAME,idCard,c

Oracle: SQL组合不同字段作为一个查询条件

前端程序传过来的值是有三个字段组合之后的结果,后端程序处理,并且将查询的数据反馈给前端. PS:不能直接使用字段RPT_NO的,因为在这条记录中RPT_NO恰好等于其他三个字段的组合值. 正确的做法是使用"拼接操作符“ (||). RT,记下来以备日后查看,有需要的同学也可参考 :)

mysql分组查询获取组内某字段最大的记录

id sid cid 1 1 12 1 23 2 1 以sid分组,最后取cid最大的那一条,以上要取第2.3条 1 方法一: 2 select * from (select * from table order by cid desc) as a group by a.sid 3 4 方法二: 5 select a.* from table as a where cid = (select max(cid) from table where a.sid = sid) 6 7 方法三: 8 se

sql 以某个字段分组,另一个字段为参加比较的列,取得前n项的值

假设表A有三个字段 { id int: subject varchar(20): socre int: } 语句为 select * from A  x where (select count(*) from A where subject=x.subject and score>=x.score   )<=15

sql server统计字段的值在某些范围内中的个数

有一张表test如下: create table test ( id int identity(1,1) primary key, num int ) 插入数据: insert into test( num) values (1); insert into test( num) values (2); insert into test( num) values (8); insert into test( num) values (15); insert into test( num) valu

分组后取每组内排名的Top N的SQL语句

给个MySQL例子参考 -----查询每门课程的前2名成绩 CREATE   TABLE   StudentGrade( stuId   CHAR(4),         --学号 subId   INT,                 --课程号 grade   INT,                 --成绩 PRIMARY   KEY   (stuId,subId) ) GO --表中数据如下 INSERT   INTO   StudentGrade(stuId,subId,grade

[mysql] 先按某字段分组再取每组中前N条记录

From: http://blog.chinaunix.net/uid-26729093-id-4294287.html 请参考:http://bbs.csdn.net/topics/330021260 create table t2 (    id int primary key,    gid    char,    col1    int,    col2    int) engine=myisam; insert into t2 values (1,'A',31,6),(2,'B',25

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN