SQL如何在一个语句中由于两个where条件而获得两列

问题描述

我正在注册由加利福尼亚大学戴维斯分校提供的名为sql FOR DATA SCIENCE的Coursera课程。我正在做最后一个测试,下面是根据客户评论表的下一个问题:

其中是否有更多带有“爱”或“恨”字的评论

我通过两个单独的SELECT语句获得响应,并获得两个输出

SELECT COUNT(*) AS lovE
FROM REVIEW
WHERE TEXT LIKE '%love%';

+------+
| lovE |
+------+
| 1780 |
+------+
    
SELECT COUNT(*) AS HATE
FROM REVIEW
WHERE TEXT LIKE '%hate%';

+------+
| HATE |
+------+
|  232 |
+------+

是否有一种方法可以通过一条语句获得这样的输出

+------+------+
| lovE | HATE |
+------+------+
| 1780 |  232 |
+------+------+

我对sql还是很陌生,尽管我得到了希望以更好的方式实现的响应。有什么建议吗?

解决方法

您可以在聚合中使用条件CASE..WHEN表达式:

SELECT SUM(CASE WHEN TEXT LIKE '%love%' THEN 1 END) AS LOVE,SUM(CASE WHEN TEXT LIKE '%hate%' THEN 1 END) AS HATE 
  FROM REVIEW

Demo