SQL 按城市排序和分组
SQL order by and group by city
我在使用 sql 查询时遇到问题 我将首先概述数据库结构:
id | userid | City
------------------------
1 | 1 | New York
2 | 1 | Washington
3 | 1 | New York
4 | 1 | Miami
5 | 2 | New York
4 | 1 | Ney York
5 | 1 | Miami
这是它的样子,
userid 链接到用户帐户。
我喜欢得到的是:
如果我查询 userid 1,我想获得该用户 5 个最常见城市的列表及其计数;在这种情况下它将是
Counts | City
------------------------
3 | New York
2 | Miami
1 | Washington
我已经试过了:
SELECT count(city), city FROM cities WHERE userid = '1' GROUP BY city ORDER BY count(city) DESC LIMIT 5
但这只是给出了一个列表:
Counts | City
------------------------
1 | New York
1 | New York
1 | New York
1 | Miami
1 | Miami
感谢您的到来!
你想数 id
的..
SELECT count(id), city
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(id) DESC
LIMIT 5
您的查询:
SELECT count(city), city
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(city) DESC
LIMIT 5;
对于您想做的事情是正确的。如果您在不同的行中得到同一个城市,那么您可能遇到了数据问题。例如,城市名称后可能有看起来像空格但实际上不是的不可打印字符。一种判断方法是通过分隔城市名称并查看其长度,例如:
SELECT count(city), concat('"', city, '"'), length(city)
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(city) DESC
LIMIT 5;
我在使用 sql 查询时遇到问题 我将首先概述数据库结构:
id | userid | City
------------------------
1 | 1 | New York
2 | 1 | Washington
3 | 1 | New York
4 | 1 | Miami
5 | 2 | New York
4 | 1 | Ney York
5 | 1 | Miami
这是它的样子, userid 链接到用户帐户。
我喜欢得到的是: 如果我查询 userid 1,我想获得该用户 5 个最常见城市的列表及其计数;在这种情况下它将是
Counts | City
------------------------
3 | New York
2 | Miami
1 | Washington
我已经试过了:
SELECT count(city), city FROM cities WHERE userid = '1' GROUP BY city ORDER BY count(city) DESC LIMIT 5
但这只是给出了一个列表:
Counts | City
------------------------
1 | New York
1 | New York
1 | New York
1 | Miami
1 | Miami
感谢您的到来!
你想数 id
的..
SELECT count(id), city
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(id) DESC
LIMIT 5
您的查询:
SELECT count(city), city
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(city) DESC
LIMIT 5;
对于您想做的事情是正确的。如果您在不同的行中得到同一个城市,那么您可能遇到了数据问题。例如,城市名称后可能有看起来像空格但实际上不是的不可打印字符。一种判断方法是通过分隔城市名称并查看其长度,例如:
SELECT count(city), concat('"', city, '"'), length(city)
FROM cities
WHERE userid = '1'
GROUP BY city
ORDER BY count(city) DESC
LIMIT 5;