Sql 如何根据不同的关键字从同一个表中获取单个计数

Sql 如何根据不同的关键字从同一个表中获取单个计数,sql,hive,Sql,Hive,我在一张桌子上有不同的手机类型。类型,如iPhone、android、windows等。我希望使用相同的查询获取每种类型的单个计数。我使用下面的查询来获取一种类型的计数 `select type, count(1) AS total from mobile_types where type = 'iPhone' group by type;' 我使用此记录获得了所需的o/p iphone1000 但是当我尝试多个记录时,我得到了一个错误。我将以下内容用于多个记录

我在一张桌子上有不同的手机类型。类型,如iPhone、android、windows等。我希望使用相同的查询获取每种类型的单个计数。我使用下面的查询来获取一种类型的计数

   `select type,
    count(1) AS total
    from mobile_types where type = 'iPhone'
    group by type;'
我使用此记录获得了所需的o/p

iphone1000

但是当我尝试多个记录时,我得到了一个错误。我将以下内容用于多个记录

   'select type,
    count(1) AS total
    from mobile_types where type = 'iPhone'
    from mobile_types where type = 'windows'
    group by type;'
我得到的错误是“iPhone”附近的“from”处缺少EOF的ParseException行5:0”

有没有一种方法可以获得以下格式的输出,其中类型作为列名,下面的计数作为行

|iPhone | windows | android|

1000 | 1500 | 900|

更新

我能够使用下面的脚本获得单个计数

'select type,
    count(1) AS total
    from mobile_types where type = 'iPhone' OR type = 'android' OR type = 'windows'
    group by type;'
但仍然需要上述o/p格式。当前o/p格式

iphone1000

安卓900

windows 1500


有什么建议吗?

您不需要where子句来获取类型。这将显示所有类型的列表,以及总计列中每个类型的计数

select type,
count(*) AS total
from mobile_types 
group by type;
评论后

SELECT type,
COUNT(*) AS total
FROM mobile_types 
WHERE type IN ('IPhone','Android', 'Other Phone Names')
GROUP BY type;

要获取所需的输出格式,请执行以下操作:

select
sum(if(type = 'iphone', 1, 0)) as n_iphone,
sum(if(type = 'android', 1, 0)) as n_android,
sum(if(type = 'windows', 1, 0)) as n_windows
from mobile_types;

这是我的第一个想法。但问题是我只需要在输出中输入一些类型。我编辑了答案以反映您希望看到的内容。谢谢您的帮助。是否有一种方法可以将输出(如电话类型)显示为列名,并在列名下方显示每种电话类型的计数?您使用的是什么DBMS?(SQL Server,Oracle)我建议打开另一个问题,因为这个问题的答案已经完成。我认为解决这个问题的方法是特定于蜂巢的,我不能再进一步了。抱歉:(它起作用了。但它只是显示输出值,而不显示列名称,如1000 1500 900do“set hive.cli.print.header=true;”,然后重新运行