我很困惑在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
我有点困惑什么是错的。任何人都可以帮助我,我非常感激。谢谢。
尝试以下方式
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
为了简洁起见,我更喜欢在这里使用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。
条件是你的问题,水果不能等于“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')
;