Mysql 将国家分组计算
我有一张这样的桌子:Mysql 将国家分组计算,mysql,sql,sql-server,database,Mysql,Sql,Sql Server,Database,我有一张这样的桌子: ------------------------------- EMP ID|Country |Emp Level | ------|-----------|-----------| 102 |UK |Staff | 103 |US |Admin Staff| 104 |CA |Staff | 105 |NL |Admin Staff| 106 |MN
-------------------------------
EMP ID|Country |Emp Level |
------|-----------|-----------|
102 |UK |Staff |
103 |US |Admin Staff|
104 |CA |Staff |
105 |NL |Admin Staff|
106 |MN |Intern |
107 |IN |Staff |
108 |UK |Staff |
109 |US |Admin Staff|
110 |IN |Admin Staff|
------------------------------
我需要对每个国家的每一个类别的雇员数量进行统计,如果条件不在国家>代码>(“英国”或“美国”或“CA”)< /代码>,则将其视为“全球”。因此,我们的答案应该是:
------------------------------
|Country |Emp Level |Count|
|-----------|-----------|-----
|UK |Staff |2
|US |Admin Staff|2
|CA |Staff |1
|Global |Admin Staff|2
|Global |Intern |1
|Global |Staff |1
到目前为止,我可以计算每个国家/地区每个类别的员工人数,但无法将不在给定范围内的国家/地区加入俱乐部,并将其计算并显示为全球员工。您尝试过吗
select country as cou, emp_level as emp, count(*)
from your_table
where country in ('UK', 'US', 'CA')
group by cou, emp
order by cou, emp
union
select 'global', emp_level as emp, count(*)
from your_table
where country not in ('UK', 'US', 'CA')
group by emp
order by emp
在电视上看
如果列
Country
中有NULL
的行,则此查询与@eggyal和@duffymo查询的结果将有所不同。此查询将对'Global'
组中的那些行进行计数,而另一个查询根本不会对它们进行计数。可能类似的操作会起作用(未测试,可能需要更多的工作)
你能用样本数据发布模式吗?+1关于
NULL
(尽管你可以在相关过滤条件中添加或Country IS NULL
,如果需要的话);也就是说,我仍然更喜欢UNION
方法,因为它可以使用索引来执行筛选和分组(而我认为您的版本不能?)@eggyal我不确定我的查询是否会使用索引,或者是否会有效地使用索引。工会的答案更可能是这样。
SELECT Country, EmpLevel, COUNT(*) AS Count
FROM my_table
WHERE Country IN ('UK', 'US', 'CA')
GROUP BY Country, EmpLevel
UNION
SELECT 'Global', EmpLevel, COUNT(*) AS Count
FROM my_table
WHERE Country NOT IN ('UK', 'US', 'CA')
GROUP BY EmpLevel
SELECT
CASE WHEN Country IN ('UK', 'US', 'CA') THEN Country ELSE 'Global' END
AS Country,
EmpLevel,
COUNT(*) AS Count
FROM
tableX
GROUP BY
CASE WHEN Country IN ('UK', 'US', 'CA') THEN Country ELSE 'Global' END,
EmpLevel ;
SELECT CASE WHEN Country NOT IN ('US','UK','CA') THEN 'Global' ELSE Country, Emp_Level, COUNT(*)
FROM table_name
GROUP BY Country, Emp_Level