gpt4 book ai didi

php - mysql:如何从一个表中列出 2 个不同的条件、排序和限制要求?

转载 作者:行者123 更新时间:2023-11-29 02:24:08 24 4
gpt4 key购买 nike

有一 table 男女。该表具有字段,性别具有值,男性或女性。

TABEL-A

ID SEX GRADE-A GRADE=B
1 men 2 4
2 women 4 5
3 women 6 1
4 men 1 3
5 men 3 6
6 men 5 2

我想按如下方式对表格进行排序;

首先,仅列出按 GRADE-A DESC 排序的男性中的 2 个。

其次,按 GRADE-B DESC 列出男性和女性的所有休息

预期输出;

ID SEX    GRADE-A   GRADE=B
6 men 5 2
5 men 3 6
2 women 4 5
1 men 2 4
4 men 1 3
3 women 6 1

因为这两个条件有不同的排序要求,所以我不能使用 UNION。UNION 也很慢。

这是我失败的查询,第 1 部分

select distinct t.*
(
(
select *
from TABLE-A a
where a.sex = 'men'
order by a.GRADE-A DESC
LIMIT 2
)
UNION ALL
(
select *
from TABLE-A a
order by a.GRADE-B DESC
)
) t

我也试过“case when”逻辑,但一开始不能限制2个人,

这是我失败的查询,第 2 部分

select *
from TABLE-A a
order by
case when a.sex = 'men' then a.GRADE-A end DESC, a.GRADE-B DESC

有人可以支持对此进行适当的查询吗?

最好的问候

最佳答案

试试这个查询:

SELECT a.*
FROM `TABLE-A` a
LEFT JOIN (
SELECT m2.ID
FROM `TABLE-A` m2
WHERE m2.sex = 'men'
ORDER BY m2.`GRADE-A` DESC
LIMIT 2
) m2 ON m2.ID = a.ID
ORDER BY
CASE WHEN m2.ID IS NULL THEN 1 ELSE 0 END,
CASE WHEN m2.ID IS NULL THEN a.`GRADE-B` ELSE a.`GRADE-A` END DESC

SQL Fiddle 上测试它

解释:

要了解 ORDER BY 的工作原理,请参阅此表 - 这是所有 TABLE-A 数据加上查询中某些表达式的值 (CASE1 引用第一个 CASE 表达式,CASE2 - 引用第二个):

ID SEX    GRADE-A   GRADE=B  m2.ID   CASE1  CASE2
1 men 2 4 NULL 1 4
2 women 4 5 NULL 1 5
3 women 6 1 NULL 1 1
4 men 1 3 NULL 1 3
5 men 3 6 5 0 3
6 men 5 2 6 0 5

ORDER BYCASE1 值(升序)然后按 CASE2(降序)对行进行排序。所以在排序之后我们得到了预期的结果:

ID SEX    GRADE-A   GRADE=B  m2.ID   CASE1  CASE2
6 men 5 2 6 0 5
5 men 3 6 5 0 3
2 women 4 5 NULL 1 5
1 men 2 4 NULL 1 4
4 men 1 3 NULL 1 3
3 women 6 1 NULL 1 1

关于 Sorting Rows 的更多信息

关于php - mysql:如何从一个表中列出 2 个不同的条件、排序和限制要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281856/

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