国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】union (all) 后 order by 子查詢排序不生效問題解決方案

這篇具有很好參考價(jià)值的文章主要介紹了【MySQL】union (all) 后 order by 子查詢排序不生效問題解決方案。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

力扣題

1、題目地址

2308. 按性別排列表格

2、模擬表

表:Genders

Column Name Type
user_id int
gender varchar
  • user_id 是該表的主鍵(具有唯一值的列)。
  • gender 的值是 ‘female’,‘male’,‘other’ 之一。
  • 該表中的每一行都包含用戶的 ID 及其性別。
  • 表格中 ‘female’,‘male’,‘other’ 數(shù)量相等。

3、要求

  • 編寫一個(gè)解決方案以重新排列 Genders 表,使行按順序在 ‘female’,‘other’ 和 ‘male’ 之間交替。
  • 同時(shí)每種性別按照 user_id 升序進(jìn)行排序。
  • 按 上述順序 返回結(jié)果表。

4、示例

輸入:

Genders 表:

user_id gender
15 other
12 female
1 other
2 female
21 other
5 male
20 male
14 other
11 male
4 male
19 male
18 other
6 other
9 female
3 female
8 female
10 male
7 other
16 male
13 female
17 female

輸出:

user_id gender
2 female
1 other
4 male
3 female
6 other
5 male
8 female
7 other
10 male
9 female
14 other
11 male
12 female
15 other
16 male
13 female
18 other
19 male
17 female
21 other
20 male

解釋:

女性:ID 2、3、8、9、12、13、17。
其他性別:ID 1、6、7、14、15、18、21。
男性:ID 4、5、10、11、16、19、20。
我們在 ‘female’,‘other’,‘male’ 之間交替排列表。
注意,每種性別都是按 user_id 升序排序的。

5、代碼編寫

錯(cuò)誤寫法(union (all) 后 order by 子查詢排序不生效)

SELECT user_id, gender
FROM (
    SELECT row_number() over (order by user_id) AS id, user_id, gender
    FROM Genders
    WHERE gender = 'female'
    UNION ALL
    SELECT row_number() over (order by user_id) AS id, user_id, gender
    FROM Genders
    WHERE gender = 'other'
    UNION ALL
    SELECT row_number() over (order by user_id) AS id, user_id, gender
    FROM Genders
    WHERE gender = 'male'
) AS one
ORDER BY id
| user_id | gender |
| ------- | ------ |
| 4       | male   |
| 1       | other  |
| 2       | female |
| 3       | female |
| 5       | male   |
| 6       | other  |
| 8       | female |
| 10      | male   |
| 7       | other  |
| 14      | other  |
| 11      | male   |
| 9       | female |
| 15      | other  |
| 12      | female |
| 16      | male   |
| 18      | other  |
| 13      | female |
| 19      | male   |
| 21      | other  |
| 17      | female |
| 20      | male   |

正確寫法(在 union (all) 前后都加一個(gè)字段來保證順序,后面在 order by 加上就行)

SELECT user_id, gender
FROM (
    SELECT row_number() over (order by user_id) AS id, user_id, gender, 0 AS sort
    FROM Genders
    WHERE gender = 'female'
    UNION ALL
    SELECT row_number() over (order by user_id) AS id, user_id, gender, 1 AS sort
    FROM Genders
    WHERE gender = 'other'
    UNION ALL
    SELECT row_number() over (order by user_id) AS id, user_id, gender, 2 AS sort
    FROM Genders
    WHERE gender = 'male'
) AS one
ORDER BY id, sort
| user_id | gender |
| ------- | ------ |
| 2       | female |
| 1       | other  |
| 4       | male   |
| 3       | female |
| 6       | other  |
| 5       | male   |
| 8       | female |
| 7       | other  |
| 10      | male   |
| 9       | female |
| 14      | other  |
| 11      | male   |
| 12      | female |
| 15      | other  |
| 16      | male   |
| 13      | female |
| 18      | other  |
| 19      | male   |
| 17      | female |
| 21      | other  |
| 20      | male   |

網(wǎng)友寫法(用的很巧妙)

SELECT * 
FROM Genders
ORDER BY row_number() over(partition by gender order by user_id),
         case when gender = 'female' then 1 
              when gender = 'male' then 3 
              else 2 end

思考得出的新寫法

直接使用 order by gender 是不行的,female-male-other 的順序不符合要求 female-other-male,剛好可以使用長度倒序去做

SELECT *
FROM genders
ORDER BY row_number() over(partition by gender order by user_id),
         length(gender) desc

參考

mysql union (all) 后 order by 的排序失效問題解決文章來源地址http://www.zghlxwxcb.cn/news/detail-797645.html

到了這里,關(guān)于【MySQL】union (all) 后 order by 子查詢排序不生效問題解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【mysql學(xué)習(xí)篇】Order by與Group by優(yōu)化以及排序算法詳解

    【mysql學(xué)習(xí)篇】Order by與Group by優(yōu)化以及排序算法詳解

    Case1: 分析: 利用 最左前綴 法則:中間字段不能斷,因此查詢用到了name索引,從key_len=74也能看出,age索引列用在排序過程中,因?yàn)镋xtra字段里沒有using filesort 注意: order by age 雖然用到了索引,但是不會在key_len列體現(xiàn) Case 2: 分析: 從explain的執(zhí)行結(jié)果來看:key_len=74,查詢

    2024年02月15日
    瀏覽(25)
  • MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?

    MySQL使用SELECT 語句不加ORDER BY默認(rèn)是如何排序的?

    大家好,我是阿飛云 怕什么真理無窮,進(jìn)一步有近一步的歡喜 記錄一個(gè) MySQL 查詢排序的問題,一個(gè)SQL語句沒有加 order by ,那么查詢出來的結(jié)果到底是按照什么規(guī)則排序的呢?查詢了網(wǎng)上的一些資料,分享如下: ?MyISAM 表 MySQL Select 默認(rèn)排序是按照物理存儲順序顯示的(不

    2024年02月10日
    瀏覽(24)
  • mysql語句中order by的查詢速度太慢 請問需要做出哪些優(yōu)化策略來提升查詢速度...

    如果在MySQL中使用 order by 語句導(dǎo)致查詢速度過慢,可以考慮以下優(yōu)化策略: 使用索引:為排序字段建立索引可以提高查詢速度。 增加內(nèi)存:如果服務(wù)器內(nèi)存不足,MySQL可能需要使用臨時(shí)表或磁盤排序,增加內(nèi)存可以避免這種情況。 減少數(shù)據(jù)量:使用 limit 語句可以限制結(jié)果集

    2024年02月13日
    瀏覽(21)
  • mysql order by 索引問題綜合分析

    mysql order by 索引問題綜合分析

    一,文章1 Mysql-索引失效 order by優(yōu)化_orderby索引失效_zyk1.的博客-CSDN博客 總結(jié): 0,索引 與 查詢條件 與 排序字段關(guān)系,Using filesort出現(xiàn)場景 1.聯(lián)合索引,最左匹配原則,不僅查詢條件需要遵循,排序也需要遵循,查詢+排序組合也要遵循 2.extra 避免出現(xiàn)filesort,使用index排序

    2024年02月07日
    瀏覽(21)
  • 玩轉(zhuǎn)Mysql系列 - 第8篇:詳解排序和分頁(order by & limit),及存在的坑

    這是Mysql系列第7篇。 環(huán)境:mysql5.7.25,cmd命令中進(jìn)行演示。 代碼中被[]包含的表示可選,|符號分開的表示可選其一。 本章內(nèi)容 詳解排序查詢 詳解limit limit存在的坑 分頁查詢中的坑 排序查詢(order by) 電商中:我們想查看今天所有成交的訂單,按照交易額從高到低排序,此

    2024年02月11日
    瀏覽(20)
  • 6、hive的select(GROUP BY、ORDER BY、CLUSTER BY、SORT BY、LIMIT、union、CTE)、join使用詳解及示例

    6、hive的select(GROUP BY、ORDER BY、CLUSTER BY、SORT BY、LIMIT、union、CTE)、join使用詳解及示例

    1、apache-hive-3.1.2簡介及部署(三種部署方式-內(nèi)嵌模式、本地模式和遠(yuǎn)程模式)及驗(yàn)證詳解 2、hive相關(guān)概念詳解–架構(gòu)、讀寫文件機(jī)制、數(shù)據(jù)存儲 3、hive的使用示例詳解-建表、數(shù)據(jù)類型詳解、內(nèi)部外部表、分區(qū)表、分桶表 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL

    2024年02月11日
    瀏覽(26)
  • SQL中的UNION和UNION ALL的區(qū)別及用法詳解、“提高SQL查詢效率:UNION和UNION ALL的比較、使用實(shí)例詳解SQL中的UNION和UNION ALL操作符

    UNION 和 UNION ALL 都是 SQL 中用于將多個(gè) SELECT 語句的結(jié)果合并成一個(gè)結(jié)果集的操作符。它們都適用于需要將多個(gè)表或查詢結(jié)果合并在一起的情況。但是它們的行為略有不同。 UNION 和 UNION ALL 的區(qū)別在于, UNION 會將結(jié)果集合并成一個(gè)不含重復(fù)行的結(jié)果集,而 UNION ALL 則會保留所有

    2024年02月03日
    瀏覽(45)
  • MySQL的CRUD操作&&函數(shù)介紹&&union和union all

    MySQL的CRUD操作&&函數(shù)介紹&&union和union all

    目錄 一. CRUD(增刪改查) 1.1 SELECT(查詢) 概念 語法 含義 ?1.2 INSERT(新增) 概念 語法 含義 1.3 UPDATE(修改) 語法 含義 1.4 DELETE(刪除) 語法 含義 二. 函數(shù) 2.1 常見函數(shù) 字符函數(shù) 數(shù)字函數(shù) 日期函數(shù) 2.2 流程控制函數(shù) 語法 ?示例 2.3 聚合函數(shù) 三. UNION與UNION ALL 概念 語法 專

    2024年01月23日
    瀏覽(14)
  • mysql之CRUD和常見函數(shù)和UNION 和 UNION ALL

    mysql之CRUD和常見函數(shù)和UNION 和 UNION ALL

    CRUD 是數(shù)據(jù)庫操作的基本操作,代表了創(chuàng)建(Create)、讀取(Read)、更新(Update)和刪除(Delete)四個(gè)常見的數(shù)據(jù)庫操作。下面是 MySQL 中進(jìn)行 CRUD 操作的詳細(xì)介紹: 使用 INSERT INTO 語句可以向表中插入新的記錄。 INSERT INTO your_table_name (column1, column2, column3, …) VALUES (value1, val

    2024年02月02日
    瀏覽(16)
  • thinkphp 5 實(shí)現(xiàn)UNION ALL 3個(gè)聯(lián)表查詢,并且?guī)纤阉鳁l件,名稱,時(shí)間,手機(jī)號

    在ThinkPHP 5中實(shí)現(xiàn)帶有搜索條件、名稱、時(shí)間和手機(jī)號的3個(gè)聯(lián)表查詢(UNION ALL),您可以按照以下步驟進(jìn)行操作: 確保已經(jīng)配置好數(shù)據(jù)庫連接信息和相關(guān)的模型。 使用 union() 方法來構(gòu)建3個(gè)聯(lián)表查詢,同時(shí)在每個(gè)查詢中添加所需的搜索條件、名稱、時(shí)間和手機(jī)號。 在上述代碼

    2024年02月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包