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;