与多个表格不同的前十名

时间:2016-12-15 19:41:16

标签: sql sqlite join distinct

我在SQLite中有这两个表

CREATE TABLE "freq" (
    `id`    INTEGER,
    `translation_id`    INTEGER,
    `freq`  INTEGER DEFAULT NULL,
    `year`  INTEGER,
    PRIMARY KEY(`id`),
    FOREIGN KEY(`translation_id`) REFERENCES `translation`(`id`) DEFERRABLE INITIALLY DEFERRED
)

CREATE TABLE translation (
  id         INTEGER PRIMARY KEY,
  w_id       INTEGER,
  word       TEXT DEFAULT NULL,
  located_in TEXT,
  UNIQUE (word, language)
    ON CONFLICT ABORT
)

根据这些表中的值,我想创建第三个,其中包含每个translation.located_in的每个freq.year的前10个单词。这看起来像这样:

CREATE TABLE top_ten_words_by_country (
  id         INTEGER PRIMARY KEY,
  located_in TEXT,
  year       INTEGER,
  `translation_id`  INTEGER,
  freq       INTEGER,
  FOREIGN KEY(`translation_id`) REFERENCES `translation`(`id`) DEFERRABLE INITIALLY DEFERRED
)

到目前为止我尝试过(一个国家和一年):

SELECT *  FROM freq f, translation t
WHERE t.located_in = 'Germany' ORDER BY f.freq DESC

有这些问题:

  • 它没有添加translation中具有相同w_id的多个单词(这意味着它们是彼此的翻译)
  • 它只适用于一年和一个国家
  • 它需要很长时间(我知道连接很昂贵,所以加快速度并不重要)
  • 它包含重复的translation.word

那么有人能为我提供一个方法来做我想要的吗?

速度对我来说是最重要的事情。

1 个答案:

答案 0 :(得分:1)

看,你有一个笛卡尔积(你的桌子之间没有关系)。 此外,你必须使用' group by'条款。 您可以创建一个视图而不是表。 将您的查询更改为:

composer.gotoscene("main")