对SQL不好,很抱歉,如果我的问题看起来很愚蠢。我有这个工作代码,用于提取输入日期和在该日期输入商店1的人数。
select entry_date as Enter_Date
,count(entry_date) as Entries
from db_entry
where entry_date between '2017-03-05' and '2017-03-11'
and entry_code like 'STR1%'
group by entry_date
这就是它显示为
的内容Enter_Date Entries
3/5/2017 35
3/9/2017 30
3/10/2017 27
3/8/2017 23
3/7/2017 29
3/6/2017 32
3/11/2017 39
我想知道是否有办法为商店2添加另一列,其中entry_code为'STR2%'。我不知道该怎么做的原因是因为我没有从db_entry中提取不同的列,所以我不确定如何区分WHERE子句中的两列。
此外,我想知道是否有一种快速的方法来对每一列进行求和并将最新日期作为输入日期。理想情况下,这就是我希望我的表格看起来像:
Enter_Date Store 1 Store 2
3/11/2017 215 301
答案 0 :(得分:1)
使用case
表达式进行条件计数。
select entry_date as Enter_Date,
count(case when entry_code like 'STR1%' then entry_date end) as Entries1,
count(case when entry_code like 'STR2%' then entry_date end) as Entries2
from db_entry
where entry_date between '2017-03-05' and '2017-03-11'
and entry_code like any ('STR1%', 'STR2%')
group by entry_date
注意:现在不需要WHERE
子句like
str1 / str2,但可能会加快查询速度。
编辑现在使用like any
,正如@Dudu Markovitz所建议的那样!
答案 1 :(得分:1)
要回答第二个问题,只需删除GROUP BY
并切换到:
select MAX(entry_date) as Enter_Date,
count(case when entry_code like 'STR1%' then entry_date end) as "Store 1",
count(case when entry_code like 'STR2%' then entry_date end) as "Store 2"
from db_entry
where entry_date between date '2017-03-05' and date '2017-03-11'
and entry_code like any ('STR1%', 'STR2%')