我正在查询一个表,但我需要不同列的输出



假设我有一个表格,下面是

Member ID  | Hotel ID  | Country | 
----------- ----------- ----------
100         ZZA         Country 1
101         ZZA         Country 2
102         ZZB         Country 2
103         ZZC         Country 3
201         XXD         Country 4
202         XXE         Country 1
203         AAB         Country 1

我需要根据不同的规则输出不同国家的成员计数:

  • 规则1:酒店ID以XX或AA开头的成员在国家的成员数。
  • 规则2:成员ID以10开头的国家的成员数。

我可以写2个不同的查询有这样的输出:

Rule 1
Country  |  Member Count
--------- ----------
Country 4  1
Country 1  2
Rule 2
Country  |  Member Count
--------- ----------
Country 2  2
Country 1  1
Country 3  1

是否有办法在不同的列中有1个查询和1个输出?这样的:

Country | Rule 1 | Rule 2
-------- -------- --------
Country 1    2       1   
Country 2    0       2
Country 3    0       1 
Country 4    1       0

我使用数据库浏览器的SQLite,我创建了一个表,并导入了我正在工作的CSV文件。我知道我可以使用数据透视表,但是它太慢了。

您可以按国家/地区分组并使用条件聚合:

SELECT Country,
SUM(HotelID LIKE 'XX%' OR HotelID LIKE 'AA%') Rule1,
SUM(MemberID LIKE '10%') Rule2
FROM tablename
GROUP BY Country;

或用SUBSTR()代替LIKE:

SELECT Country,
SUM(SUBSTR(HotelID, 1, 2) IN ('XX', 'AA')) Rule1,
SUM(SUBSTR(MemberID, 1, 2) = '10') Rule2
FROM tablename
GROUP BY Country;

查看演示

您可以使用表单

的单个查询
select Country,
count(case when <rule1> then 1 end) rule1,
count(case when <rule2> then 1 end) rule2
from tbl
where (<rule1>) or (<rule2>)
group by Country

,db&lt的在小提琴

相关内容

  • 没有找到相关文章

最新更新