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

假设我有一张桌子,示例如下

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

我使用 DB Browser for SQLite 创建了一个表并导入了我正在处理的 CSV 文件。我知道我可以为此使用数据透视表,但它太慢了。

leon4180 回答:我正在查询一个表,但我需要不同列中的输出

您可以使用表单的单个查询

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<>fiddle

,

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

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,2) = '10') Rule2
FROM tablename
GROUP BY Country;

参见demo

本文链接:https://www.f2er.com/10785.html

大家都在问