SQL中的三个别名

问题描述 投票:0回答:3

我很困惑在SQL中使用AS查看三个条件,这是我的表

id | Fruit
___________
1  | Apel
2  | Orange
3  | Apel
4  | Manggo
___________

这是我的第一个查询:

SELECT
COUNT(fruit) AS apelfruit
FROM fruit_table
WHERE fruit = 'Apel'

输出:

apelfruit
_________
    2

但是当我这样做时:

SELECT
COUNT(fruit) AS apelfruit,
COUNT(fruit) AS orangefruit,
COUNT(fruit) AS manggofruit
FROM fruit_table
WHERE fruit = 'Apel'
AND fruit = 'Orange'
AND fruit = 'Manggo'

输出为零(0):

 apelfruit | orangefruit | manggofruit
 ____________________________________
       0            0            0

我有点困惑什么是错的。任何人都可以帮助我,我非常感激。谢谢。

sql pivot
3个回答
1
投票

尝试以下方式

SELECT
sum(case when fruit = 'Apel' then 1 else 0 end) AS apelfruit,
sum(case when fruit = 'Orange' then 1 else 0 end) AS orangfruit,
sum(case when fruit = 'Manggo' then 1 else 0 end) AS manggofruit
FROM fruit_table

1
投票

为了简洁起见,我更喜欢在这里使用COUNT

SELECT
    COUNT(CASE WHEN fruit = 'Apel'   THEN 1 END) AS apelfruit,
    COUNT(CASE WHEN fruit = 'Orange' THEN 1 END) AS orangfruit,
    COUNT(CASE WHEN fruit = 'Manggo' THEN 1 END) AS manggofruit
FROM fruit_table;

正如@nicomp所指出的那样,以这种方式进行数据透视查询的限制是输出中出现的列是硬编码的,并且必须为新的条件计数添加更多代码。但是,唯一真正的方法是使用动态SQL。


0
投票

条件是你的问题,水果不能等于“apel”和“芒果”它应该是“apel”或“apel”

由于只计算水果,将始终统计所有水果,你还需要计算一个条件,在这个解决方案中,总和1或0,基于条件:

SELECT
SUM(IF(fruit='Apel', 1,0)) AS apelfruit,
SUM(IF(fruit='Orange', 1,0)) AS orangfruit,
SUM(IF(fruit='Manggo', 1,0)) AS manggofruit
FROM fruit_table WHERE fruit IN ('Apel', 'Orange', 'Manggo')
;
© www.soinside.com 2019 - 2024. All rights reserved.