mysql - 按顺序条件对表进行排序?
问题描述
我有一个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 语句变成一条语句,最有效的方法是什么?
解决方案
为什么不直接:
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
推荐阅读
- python - 使用 pdfminer 获取字体信息
- azure - 我无法登录我的 azure VM
- java - 你可以使用类来调用方法吗?
- angular - Angular 6 - 没有获取清单
- angularjs - 输入类型文件的多个实例加载相同的图像
- azure - Azure:如何从数据湖复制分区数据
- gdal - gdalbuildvrt:vrt 输出文件必须在同一目录中
- apache-spark - Spark:计算复杂的统计数据
- angular - Angular 5 应用程序的 Angular 材质版本
- docker - Docker 无法使用 dockerfile 在容器内运行 shell 脚本