我正在查询 table 但我需要不同列中的输出
I'm querying a table but I need the output in different columns
假设我有一个 table,示例如下
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,我在其中创建了 table 并导入了我正在处理的 CSV 文件。我知道我可以为此使用 pivot tables 但它太慢了。
您可以使用形式为
的单个查询
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
您可以按国家/地区分组并使用条件聚合:
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;
参见demo。
假设我有一个 table,示例如下
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,我在其中创建了 table 并导入了我正在处理的 CSV 文件。我知道我可以为此使用 pivot tables 但它太慢了。
您可以使用形式为
的单个查询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
您可以按国家/地区分组并使用条件聚合:
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;
参见demo。