Mysql 如何为每列使用不同的WHERE子句

Mysql 如何为每列使用不同的WHERE子句,mysql,Mysql,我认为这应该很简单,但我不知道怎么做 我想编写一个SQL查询,它将输出三列:week、number of Apple和number of oranges 假设我的数据库如下所示: week | fruit_type | fruit_num ------------------------------------------ 6/17/2013 0:00:00 | Apples | 4 6/17/2013 0:00:00 | Oranges | 3 6/24

我认为这应该很简单,但我不知道怎么做

我想编写一个SQL查询,它将输出三列:week、number of Apple和number of oranges

假设我的数据库如下所示:

week              | fruit_type | fruit_num
------------------------------------------
6/17/2013 0:00:00 | Apples     | 4
6/17/2013 0:00:00 | Oranges    | 3
6/24/2013 0:00:00 | Oranges    | 1
6/24/2013 0:00:00 | Apples     | 2
6/24/2013 0:00:00 | Apples     | 7
select 
date_trunc('week',week) as "Week", 
sum(fruit_type) as "Apples"
from table 
where fruit_type = 'Apples'
group by date_trunc('week',week)
order by date_trunc('week',week)
我希望查询输出以下内容:

week              | Apples | Oranges
------------------------------------------
6/17/2013 0:00:00 | 4      | 3
6/24/2013 0:00:00 | 9      | 1
我可以像这样分别得到苹果和桔子:

week              | fruit_type | fruit_num
------------------------------------------
6/17/2013 0:00:00 | Apples     | 4
6/17/2013 0:00:00 | Oranges    | 3
6/24/2013 0:00:00 | Oranges    | 1
6/24/2013 0:00:00 | Apples     | 2
6/24/2013 0:00:00 | Apples     | 7
select 
date_trunc('week',week) as "Week", 
sum(fruit_type) as "Apples"
from table 
where fruit_type = 'Apples'
group by date_trunc('week',week)
order by date_trunc('week',week)

但显然,您更愿意使用相同的查询生成两个列。

您可以使用case语句。您在执行select时应用了这些条件,因此不需要where子句

SELECT
date_trunc('week',week) as "Week", 
[Apples] = SUM(CASE WHEN fruit_type = 'Apples' THEN fruit_num END),
[Oranges] = SUM(CASE WHEN fruit_type = 'Oranges' THEN fruit_num END)

FROM 
table

GROUP BY ...

您可以使用case语句。您在执行select时应用了这些条件,因此不需要where子句

SELECT
date_trunc('week',week) as "Week", 
[Apples] = SUM(CASE WHEN fruit_type = 'Apples' THEN fruit_num END),
[Oranges] = SUM(CASE WHEN fruit_type = 'Oranges' THEN fruit_num END)

FROM 
table

GROUP BY ...

我不确定确切日期,所以我把它忘了。您可以使用JOIN命令连接查询,也可以通过将SUM与CASE结合使用单个查询来连接查询:

SELECT week,
SUM(CASE WHEN fruit_type = 'Apples' THEN fruit_num END) as 'Apples',
SUM(CASE WHEN fruit_type = 'Oranges' THEN fruit_num END) as 'Oranges'
from fruit
group by week
order by week
例如:


我不确定确切日期,所以我把它忘了。您可以使用JOIN命令连接查询,也可以通过将SUM与CASE结合使用单个查询来连接查询:

SELECT week,
SUM(CASE WHEN fruit_type = 'Apples' THEN fruit_num END) as 'Apples',
SUM(CASE WHEN fruit_type = 'Oranges' THEN fruit_num END) as 'Oranges'
from fruit
group by week
order by week
例如:


“LIKE”是不必要的-您应该使用“=”来代替。当使用通配符时,您只需要像。是的,如果有人输入数据时输入错误,这将非常有用。如果没有指定通配符,则不会。如果没有通配符,它将不匹配
Apples2
,即使使用LIKE;你需要像“苹果%”或“苹果”?这样才能工作。(当然,除非MySQL下允许的非标准、奇怪的语法允许它工作,在这种情况下,还有一个避免MySQL的原因。)@KenWhite:是的,我的错。我将对我的帖子进行更改。“LIKE”是不必要的-你应该使用“=”来代替。当使用通配符时,您只需要像。是的,如果有人输入数据时输入错误,这将非常有用。如果没有指定通配符,则不会。如果没有通配符,它将不匹配
Apples2
,即使使用LIKE;你需要像“苹果%”或“苹果”?这样才能工作。(当然,除非MySQL下允许的非标准、奇怪的语法允许它工作,在这种情况下,还有一个避免MySQL的原因。)@KenWhite:是的,我的错。我将对我的帖子进行更改。建议你也在水果中键入('Apples','Oranges'),给优化器一个机会。可能会有更多的水果,而您在这个查询中只关心这两个。建议您也在水果中键入('Apples','Oranges'),以给优化器一个机会。可能会有更多的结果,在这个查询中,您只关心这两个。