Mysql 查询以从SQL中排名前三的城市中选出前三名用户
我有一个位置(城市)表和一个用户表。我需要从3个顶级城市中检索3个顶级用户(其中一个城市被视为前3名,具体取决于其中有多少用户),以及城市信息。例如: 迈阿密(q=95000)Mysql 查询以从SQL中排名前三的城市中选出前三名用户,mysql,sql,join,sql-order-by,Mysql,Sql,Join,Sql Order By,我有一个位置(城市)表和一个用户表。我需要从3个顶级城市中检索3个顶级用户(其中一个城市被视为前3名,具体取决于其中有多少用户),以及城市信息。例如: 迈阿密(q=95000) 安德烈 黛布拉·摩根 加布里埃拉 纽约(q=74000) 桑迪 卡西 梅根 圣地亚哥(q=26500) 乌苏拉 雷蒙娜 罗米娜 这是我当前的查询: SELECT l.city, l.q, u.name FROM location AS l JOIN user AS u ON l.id_location = u.id_
SELECT l.city, l.q, u.name
FROM location AS l JOIN user AS u
ON l.id_location = u.id_location
ORDER BY q DESC
LIMIT 3
明显的问题是,它只给我带来了排名前1的城市中排名前3的用户。有什么想法吗
以下是表格:
位置
- id_位置
- 名字
- q(用户数量)
- id\u用户
- 名字
- 图画
SELECT
l.city, l.q
SUBSTRING_INDEX(
GROUP_CONCAT(u.name ORDER BY field_to_order DESC), ',', 3
) AS top_3_users
FROM
location AS l JOIN user AS u
ON l.id_location = u.id_location
GROUP BY
l.city, l.q
ORDER BY
l.q DESC
LIMIT 3
结果将是这样的:
Miami 95000 Andrea, Debra Morgan, Gabriela
New York 74000 Sandy, Carsie, Megan
San Diego 26500 Ursula, Ramona, Romina
编辑如果您还需要用户的图片,并且图片是VARCHAR,那么您也可以在该字段上使用GROUP_CONCAT:
SELECT
l.city, l.q
SUBSTRING_INDEX(
GROUP_CONCAT(u.name ORDER BY field_to_order DESC), ',', 3
) AS top_3_users,
SUBSTRING_INDEX(
GROUP_CONCAT(u.picture ORDER BY field_to_order DESC), ',', 3
) AS top_3_pictures
FROM
location AS l JOIN user AS u
ON l.id_location = u.id_location
GROUP BY
l.city, l.q
ORDER BY
l.q DESC
LIMIT 3
你如何知道哪一个是城市的前三大用户?是否有可以用于订购用户的字段?忘记告诉您了,我还需要用户的图片字段:s@andufo图片是一个varchar字段吗?或者它是二进制的?它是一个varchar(255)