MYSQL:从两列中选择最高的ID并排序

Posted

技术标签:

【中文标题】MYSQL:从两列中选择最高的ID并排序【英文标题】:MYSQL: Select the highest ID from two colums and sort 【发布时间】:2015-01-07 03:22:54 【问题描述】:
SELECT
    u.uid, 
    u.name, 
    u.description, 
    u.url, 
    u.picurl, 
    u.mapurl, 
    MAX(p.pid) AS MaxPriceID,
    p.price,
    p.uid,
    MAX(r.rid) AS MaxRatingID,
    r.rating,
    r.uid
FROM
    utested u
        JOIN price p
            ON u.uid=p.uid
        JOIN rating r
            ON u.uid=r.rid
GROUP BY u.uid, u.name

此查询显示我需要的内容,但未显示正确的值。

我想显示最高 PID 和 RID 我得到最高的 PID 和 RID,但不是最高的价格和评级。

有 3 张桌子。

谁能帮帮我?

【问题讨论】:

您是否需要与最高 pid、rid 相对应的所有其他详细信息,或者您需要来自 utested 的所有详细信息,以及作为单独列的最大值? 可能在您的表格中最高 PID 不对应最高评级和价格? 您需要在一个查询中获得最高的 pid 和 rid ,然后通过 join 或 subquery 获得对应的价格和评级。 您要获取 2 条记录吗?一个价格最高,一个评价最高?您在哪里指的是“最高价格”或“最高评级”(而不是 pid/rid)? 雷达:我需要最新 PID 的最高价格以及来自 utested 的所有详细信息。我需要它自己的专栏中的最新价格。我真的不需要 pid 列。我想要平均评级的 RID。不是最高的摆脱。 【参考方案1】:

正如 cmets 中所暗示的,您应该使用子查询来获得最高评分,然后在这种情况下在您的连接语句中使用它。

尝试将其更改为:

SELECT u.uid, u.name, u.description, u.url
   u.picurl, u.mapurl, p.price, p.uid, r.rating, r.uid
FROM utested u
JOIN price p ON u.uid = p.uid AND p.uid = (SELECT MAX(pid) FROM price)
JOIN rating r ON u.uid = r.rid AND r.rid = (SELECT MAX(rid) FROM rating);

如果没有任何样本数据,我无法进行测试,但我希望这可以满足您的需求,或者可以根据您的需求进行调整。

【讨论】:

它没有用。但请看我的另一个答案,它解释得更多。【参考方案2】:

@McAdam331:谢谢你指点我,但它没有用,但它帮助我重写了查询。

我用我的数据集创建了一个 sqlfiddle。我发现了另一个“问题”。我需要评级是平均的。使用 AVG(rating) 获得类似于 4.3(小数点后 1 个)的分数

http://sqlfiddle.com/#!2/93b771/1

【讨论】:

以上是关于MYSQL:从两列中选择最高的ID并排序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从两列按值排序

从两列中选择非不同的行

按两列对 MySQL 表排序

SQL查询从两列中检索两个日期之间的数据

对两列数据进行排序并保留不重复的值

EXCEL如何将两列中相同的行筛选出来并排序