gpt4 book ai didi

SQL - 正确查询按其他表中的值对项目进行排序

转载 作者:行者123 更新时间:2023-11-29 03:13:59 25 4
gpt4 key购买 nike

我在正确查询时遇到了一点问题,希望您能帮助我。我的测试表结构如下:

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
) ;

CREATE TABLE IF NOT EXISTS `user_throws` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`length` int(11) DEFAULT NULL,
PRIMARY KEY (`id`,`user_id`),
) ;

它们之间的关系是多对一的(一个用户可以有很多次抛出)。问题是我需要为所有用户制作一个排名页面,比如说前 100 名 throw 者。所以我需要一个查询结果是:

  1. 由用户过滤,只有有任何 throw 且 throw 长度大于 0 的用户才是正确记录。
  2. 按重复项过滤,因此只有唯一用户出现在列表中(我想是 GROUP BY)。
  3. 按 throw 长度排序,因此只会附加最好(最大)的结果。

为此,我编写了查询:

SELECT  `user_throws`.`length` , `users` . * 
FROM `users`
JOIN `user_throws` ON ( `user_throws`.`user_id` = `users`.`id` )
WHERE `user_throws`.`length` > '0'
GROUP BY `users`.`id`
ORDER BY `user_throws`.`length` DESC

但问题是结果没有按最长 throw 排序。它过滤长度大于 0 的抛出并显示唯一用户,但附加的长度与所需的排序不符。我发现 length 值是与用户关联的具有最低 user_throws.id 的 throw 的值。正确的查询应该是什么样的?

最佳答案

尝试:

SELECT longthrow,id,name FROM (
SELECT max(t.length) longthrow,u.id,u.name
FROM users u, user_throws t
WHERE u.id=t.user_id
AND t.length>0
GROUP BY u.id
) ORDER BY longthrow DESC

哪个应该给你每个用户最长的 throw ,按最远的优先排序,最短的最后 - 认为这就是你想要的;)

而且我应该在评论出现之前添加,最好从以下开始:

SELECT max(t.length) longthrow,u.id,u.name

比:

SELECT max(t.length) longthrow,u.*

关于SQL - 正确查询按其他表中的值对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com