Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将国家分组计算_Mysql_Sql_Sql Server_Database - Fatal编程技术网

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