我是SQL的新手,面临以下问题:
这是我的表:
name city people
-----|-----|--------|
John | A | 5 |
Ben | D | 6 |
John | A | 5 |
Ben | A | 5 |
John | B | 8 |
Ben | D | 6 |
我希望按名称分组并收到与数量最多的城市名称相关联的内容。作为第二个查询,而不是最大数量,这个城市拥有最多的居民。
这将是第一个查询的结果:
name city
-----|-----|
John | A |
Ben | D |
谢谢!
答案 0 :(得分:1)
试试这个,我试过根据你的样本数据制作一个表,
CREATE TABLE KaiTable
(
NAME VARCHAR(50)
,city CHAR(1)
,people INT
);
INSERT INTO KaiTable
VALUES
(
'John'
,'A'
,5
),
('Ben ' ,'D' ,6),
('John' ,'A' ,5),
('Ben ' ,'A' ,5) ,
('John' ,'B' ,8) ,
('Ben ' ,'D' ,6)
SELECT NAME,city
FROM
(SELECT NAME,city,SUM(people) AS PeopleSum
FROM KaiTable
GROUP BY NAME, city
ORDER BY NAME ASC, PeopleSum DESC) AS a
GROUP BY NAME DESC;
答案 1 :(得分:0)
SELECT name, city, sum( people )
FROM `detail`
GROUP BY name
ORDER BY people ASC
LIMIT 0 , 30
我不太明白你的期望,但我想你想做这件事。
描述:我是由那里的人组成的团体,得到了人的总和并使他们成为ASC命令。我不确定你是否期待这件事。
你也可以按照他们的城市对人进行分组
SELECT name, city, sum( people )
FROM `detail`
GROUP BY city
ORDER BY people ASC
LIMIT 0 , 30
如果这不是您所期望的,请进一步描述问题,我们会尝试给出一些答案。
答案 2 :(得分:0)
我不确切地知道你的意思是“以最大数量的城市名称”。我理解的是你把每对夫妇(姓名,城市)的“人”列加起来,因此(约翰,A)将是10而(约翰,B)将是8,你取最大值得到(约翰,A )。
在这种情况下,您可以这样做:
SELECT
name,
city
FROM
(SELECT
name,
city,
SUM(people) AS tot
FROM table
GROUP BY name, city
ORDER BY name ASC, tot DESC) AS a
GROUP BY name ;
对于居民人数最多的城市,你只需要按城市分组,然后对列人进行总结并采取最大值:
SELECT
city,
SUM(people) AS nb_inhabitants
FROM table
GROUP BY city
ORDER BY nb_inhabitants DESC
LIMIT 1;