我有 2 個 SQLite 表,table_a 和 table_b。表 A 包含類別串列,表 B 包含單詞串列。
我正在嘗試從 table_a 中獲取所有類別,并從 table_b 中獲取每個類別的隨機單詞。下面的查詢允許我為 table_b 中具有最低 id 的每個類別獲得 1 個結果。
SELECT table_a.category_id, table_a.category, subQuery.word, subQuery.word_category, subQuery.word_id
FROM table_a,
(SELECT *
FROM table_b
GROUP BY category_id
HAVING MIN(word_id)
) subQuery
WHERE subQuery.category_id = table_a.category_id;
有沒有辦法從 table_b 為 table_a 中的每個類別回傳 1 個隨機結果而不是具有最低 id 的值?
我真的不太幸運在網上找到答案。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
您可以使用視窗函式為每個類別選擇一行:
select
c.category_id, c.category,
w.word, w.word_category, w.word_id
from categories c
left join
(
select
word, word_category, word_id, category_id,
row_number() over (partition by category_id order by random()) as rn
from words
) w on w.category_id = c.category_id and w.rn = 1
order by c.category_id;
演示:https : //dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=bbbe8541adf2d4f62883b2a1c36aaa41
更新
您說該查詢在 SQLite 3.8 中不起作用。我們只能在這里懷疑一個錯誤,因為我們看到它在 SQLite 3.27 中有效。
這是另一種可能適合您的方法。我正在使用LIMIT子查詢為每個類別選擇一個隨機單詞 ID 。然后我加入詞資料。
select c.category_id, c.category, w.word, w.word_category, w.word_id
from
(
select
c.category_id, c.category,
(
select word_id
from words w
where w.category_id = c.category_id
order by random()
limit 1
) as word_id
from categories c
) c
join words w on w.word_id = c.word_id
order by c.category_id;
演示:https : //dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=7630068aa3ba71e70b7a6bddd83047dc
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322831.html
上一篇:獲取x.66和x.99之間的分數
