选择语句以检索具有条件的语言计数

时间:2018-04-04 12:48:16

标签: mysql

我需要显示的国家语言数量超过一种官方语言或超过2种非官方语言。这是我想做的,但不知道如何正确编写它。任何帮助都会很棒。

SELECT 
                CountryCode, 
                IsOfficial,
                COUNT(Language) as LangCount

FROM    countrylanguage
WHERE   IsOfficial = 'T' 
GROUP BY CountryCode
HAVING COUNT(Language) > 1
OR
WHERE IsOfficial = 'F'
GROUP BY CountryCode
HAVING COUNT(Language) > 2  
ORDER BY CountryCode

3 个答案:

答案 0 :(得分:1)

您只需将条件作为具有

的化合物的一部分
SELECT CountryCode, 
       IsOfficial,
       COUNT(Language) as LangCount
FROM countrylanguage
GROUP BY isOfficial, CountryCode
HAVING (COUNT(language) > 1 AND isOfficial = 'T')
    OR (COUNT(language) > 2 AND isOfficial = 'F')

您不能拥有多个group by和having子句,因此您可以合并条件。

现在,如果一个国家/地区都有,则会返回两个记录。如果一个国家/地区只有两个标准中的一个,则只返回该记录。这是你想要的吗? (这就是样本数据和预期结果有用的原因。)

答案 1 :(得分:1)

您可以通过group by and having

来实现这一目标
select 
  CountryCode
from countrylanguage
group by CountryCode having 
  sum(case when isofficial = "T" then 1 else 0 end) > 1 or 
  sum(case when isofficial = "F" then 1 else 0 end) > 2

Demo

答案 2 :(得分:0)

您可以使用UNION ALL将两个查询合并为一个。与取消重复的UNION相比,UNION ALL不会合并结果并且速度更快。

<property
    name="hibernate.query.immutable_entity_update_query_handling_mode"
    value="exception"
/>