select
'YES' Key,
(select count(1) from Source_Table where French='YES') French,
(select count(1) from Source_Table where Spanish='YES') Spanish,
(select count(1) from Source_Table where English='YES') English
from Source_Table
Limit 1
union
'NO' Key,
(select count(1) from Source_Table where French='NO') French,
(select count(1) from Source_Table where Spanish='NO') Spanish,
(select count(1) from Source_Table where English='NO') English
from Source_Table
Limit 1
在MySQL中,使用字符串列表示“yes”和“no”而不是布尔列是很少见的,但是这里的查询几乎是一样的。 您希望一个结果行表示“Yes”,一个结果行表示“No”,但是每行都有yes和no值。因此,您需要为两个结果行使用UNION ALL。您要联合的两个查询遍历所有行,并有条件地计算语言。在标准SQL中,我们将使用COUNT(*) FILTER (WHERE french = 'yes')来完成此操作,而在某些不支持FILTER子句的DBMS中,我们会使用COUNT(CASE WHEN french = 'yes' THEN 1 END)或SUM(CASE WHEN french = 'yes' THEN 1 ELSE 0 END),但在MySQL中,这变得更简单,因为在MySQL中true = 1和false = 0,我们可以只使用SUM(french = 'yes')。 完整查询:
select
'Yes' as yes_or_no,
sum(french = 'yes') as french,
sum(spanish = 'yes') as spanish,
sum(english = 'yes') as english
from mytable
union all
select
'No' as yes_or_no,
sum(french = 'no') as french,
sum(spanish = 'no') as spanish,
sum(english = 'no') as english
from mytable;
3条答案
按热度按时间uxhixvfz1#
你可以试试
GROUP BY
子句。使用以下模式
oxalkeyp2#
假设包含英语、Spanish和French三列的表名为Source_Table,下面是一个可以完成您所需任务的查询:
希望这对你有帮助。最好的问候。
hc2pp10m3#
在MySQL中,使用字符串列表示“yes”和“no”而不是布尔列是很少见的,但是这里的查询几乎是一样的。
您希望一个结果行表示“Yes”,一个结果行表示“No”,但是每行都有yes和no值。因此,您需要为两个结果行使用
UNION ALL
。您要联合的两个查询遍历所有行,并有条件地计算语言。在标准SQL中,我们将使用COUNT(*) FILTER (WHERE french = 'yes')
来完成此操作,而在某些不支持FILTER
子句的DBMS中,我们会使用COUNT(CASE WHEN french = 'yes' THEN 1 END)
或SUM(CASE WHEN french = 'yes' THEN 1 ELSE 0 END)
,但在MySQL中,这变得更简单,因为在MySQL中true = 1和false = 0,我们可以只使用SUM(french = 'yes')
。完整查询: