admin

GROUP BY具有基于另一个FIELD的首选项

sql

有什么办法可以进行分组,但是要赋予在字段中具有一定价值的记录更大的重要性?

例子:

value - language - externID
1       default      10
1       english      10

2       english      10

3       default      10

SELECT的结果:

1 - english - 10
2 - english - 10
3 - default - 10

IE:当记录具有相同的“值”时,更喜欢具有“英语”的记录

示例:SELECT * FROM tbl WHERE externID = 10 AND语言IN(’default’,’english’)GROUP
BY值“ PREFER lang = english”

ps。“英语”是一个例子,我需要我可以选择不同的特定语言


阅读 181

收藏
2021-06-07

共1个答案

admin

在另一个问题上,Yes123增加了一些额外的…

如果首选语言是中文,并且将值与默认值和英语关联,则该值应不返回任何结果…

我明白这意味着…

  • 如果该组包含搜索的语言,则返回该语言
  • 如果该组不包含该语言,但仅包含默认语言,则返回默认值
  • 如果该组不包含该语言,但包含非默认语言,则不返回任何内容

    DECLARE
    @preferred VARCHAR(64)
    SET
    @preferred = ‘English’

    SELECT
    value,
    (
    SELECT
    language
    FROM
    tbl [search]
    WHERE
    externID = 10
    AND value = tbl.value
    AND language IN (‘default’, @preferred)
    ORDER BY
    NULLIF(language, ‘default’) DESC
    LIMIT
    1
    )
    FROM
    tbl
    WHERE
    externID = 10
    GROUP BY
    value
    HAVING
    COUNT(*) = SUM(CASE WHEN language IN (‘default’, @preferred) THEN 1 ELSE 0 END)

HAVING子句只是指出该值的每个记录都必须是“默认”或您要搜索的语言。

子查询中的ORDER BY和LIMIT 1始终强制最后选择“默认”。意思是,如果找到了首选语言,则会优先显示该语言。

2021-06-07