首页 > 解决方案 > 按顺序条件对表进行排序?

问题描述

我有一个users有 5 列的表,id, age, is_premium, is_male,主键is_customer在哪里。id

我做的第一个陈述是。此语句有可能返回 0 行:

SELECT * FROM users
WHERE is_premium = 1 AND
is_name = 0 AND
is_customer = 0

然后仅从我从上述查询中得到的行中,我想找到年龄最大的人。

SELECT * FROM <from the above query>
WHERE id = (SELECT MAX(ID) <from the above query>)

问题:如何将这 2 条单独的 SQL 语句变成一条语句,最有效的方法是什么?

标签: mysqlsqldatabase

解决方案


为什么不直接:

SELECT *
FROM users
WHERE is_premium = 1 
AND is_name = 0 
AND is_customer = 0
ORDER BY age DESC, id ASC
LIMIT 1

对于 mysql 版本 8 及更高版本,您还可以使用公用表表达式 (CTE):

WITH D AS (
    SELECT * FROM users
    WHERE is_premium = 1 
    AND is_name = 0 
    AND is_customer = 0
)
SELECT * 
FROM D
WHERE AGE = (SELECT MAX(AGE) FROM D)
ORDER BY ID
LIMIT 1

推荐阅读