2017-04-07 70 views
-1

所以,我面臨的一個錯誤,而試圖使用ORDER BY 2列上SQLite的次序混合ASC和隨機():瞭如何通過

... ORDER BY VAL,隨機();

錯誤是:「第二ORDER BY期限不匹配的結果集的任何列」

我嘗試不同的方式來ASC分揀第一列和隨機排序的第二列,沒有運氣相結合。

更新,以提供更多信息

CREATE TABLE tabelaid INTEGER, val TEXT, PRIMARY KEY(id) );

INSERT INTO tabela (val) VALUES ('paid'); 
INSERT INTO tabela (val) VALUES ('paid'); 
INSERT INTO tabela (val) VALUES ('paid'); 
INSERT INTO tabela (val) VALUES ('standard'); 
INSERT INTO tabela (val) VALUES ('standard'); 
INSERT INTO tabela (val) VALUES ('standard'); 
INSERT INTO tabela (val) VALUES ('standard'); 
INSERT INTO tabela (val) VALUES ('standard'); 

預期樣品結果:

val  id 
---  --- 
paid  3 
paid  1 
paid  2 
standard 5 
standard 8 
standard 4 
standard 6 
standard 7 

其中的 'id' 1,2,3將 '付費' 'VAL' 和 '編號' 4內被隨機地排序... 8會隨機「標準」「VAL」

+0

'爲了通過,B'並不意味着按b排列一列和一列。您將始終對完整的行進行排序。第一個排序鍵是a,對於相同的a,第二個鍵b被評估。請提供一個MCVE http://stackoverflow.com/help/mcve對於包含轉儲的SQLite,即包含至少一個「CREATE TABLE」和幾個「INSERT INTO」行的文本,以便我們可以重新創建您的示例結構並樣本輸入。給出一個代碼示例,它通過「random()」以外的不同鍵對兩列進行排序(即證明我錯了)。 – Yunnosch

+0

嗨@Yunnosch,謝謝你的關注。我很抱歉不是「完整的」。我發佈了一個問題更新,希望我的MCV現在可以。 –

+0

是「付費」和「標準」固定字符串嗎?我可以在查詢中對它們進行硬編碼嗎? – Yunnosch

回答

1

select val, id from (select random() as r, * from tabela) order by val, r;

內排序訣竅是使具有與隨機值的列的上即時表((...)內側)。可以按此順序。
請注意,此查詢正在排序/排序該實時表的完整行。

輸出1:

paid|1 
paid|3 
paid|2 
standard|8 
standard|5 
standard|7 
standard|6 
standard|4 

輸出2:

paid|3 
paid|1 
paid|2 
standard|5 
standard|8 
standard|7 
standard|4 
standard|6 

請原諒我的印象是,你認爲訂貨列。如果僅使用(...)中的子查詢,請研究輸出,然後想象「手動」排列行,但不允許更改任何行,這可能會幫助您查看差異。

這是查詢使上即時表(帶額外排序):

select random() as r, * from tabela order by val, id; 

,其輸出:

6112298175921944810|1|paid 
-750320757383183987|2|paid 
-4687754812847362857|3|paid 
574487853771424670|4|standard 
6662074554381494613|5|standard 
5947282373212186891|6|standard 
-695595223160523440|7|standard 
-6914056362765123037|8|standard 
+0

是@Yunnosch,它解決了這個問題,謝謝。 我也在嘗試 「select tab,val val from tabela where val ='paid'order by random() union all select tab,val val ='standard'order by random(); ,它升起了與我第一次遇到的錯誤類型相同的錯誤類型。 –