我需要显示的国家语言数量超过一种官方语言或超过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
答案 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
答案 2 :(得分:0)
您可以使用UNION ALL将两个查询合并为一个。与取消重复的UNION相比,UNION ALL不会合并结果并且速度更快。
<property
name="hibernate.query.immutable_entity_update_query_handling_mode"
value="exception"
/>