具体数据查询
Specific Data Query
Link 上一个线程 - 已链接
总结
Based on the link above, I have continued to code more specfic result
that I want, which i have met some problem during the code which is
using "WHERE" statement for showing specfic data after using
subsitution variable(&)
基于 Mr.Barboros 提供的工作代码,我想添加一些查询以仅显示某些位置,例如,
我有查询 2016 ,应该只显示 2 个结果
FACILITYNAME COUNT_TIMES MONTHS
Science Lab 1 4
Science Lab 1 5
But it always show extra Location which is Biology even in 2016 there
is no Biology inserted to the DB.
- If i added more location with "OR" , it will still continue show the result , below is the code for my query.
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND f.FACILITYNAME = 'Toilet' OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab'
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));
http://sqlfiddle.com/#!4/13a6a/9
The result that I want is, when i entered any year , only show
Toilet,Science Lab Biology Lab
需要在 'OR' 组条件周围添加“()”。如果没有括号,AND
将优先于 OR
。参考SQL Logic Operator Precedence.
试试这个:
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND (f.FACILITYNAME = 'Toilet' OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab')
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));
没有括号,您的查询实际上是这样做的(这是不正确的):
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE ( TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND f.FACILITYNAME = 'Toilet') OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab'
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));
Link 上一个线程 - 已链接
总结
Based on the link above, I have continued to code more specfic result that I want, which i have met some problem during the code which is using "WHERE" statement for showing specfic data after using subsitution variable(&)
基于 Mr.Barboros 提供的工作代码,我想添加一些查询以仅显示某些位置,例如,
我有查询 2016 ,应该只显示 2 个结果
FACILITYNAME COUNT_TIMES MONTHS
Science Lab 1 4
Science Lab 1 5
But it always show extra Location which is Biology even in 2016 there is no Biology inserted to the DB. - If i added more location with "OR" , it will still continue show the result , below is the code for my query.
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND f.FACILITYNAME = 'Toilet' OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab'
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));
http://sqlfiddle.com/#!4/13a6a/9
The result that I want is, when i entered any year , only show Toilet,Science Lab Biology Lab
需要在 'OR' 组条件周围添加“()”。如果没有括号,AND
将优先于 OR
。参考SQL Logic Operator Precedence.
试试这个:
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND (f.FACILITYNAME = 'Toilet' OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab')
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));
没有括号,您的查询实际上是这样做的(这是不正确的):
SELECT f.FACILITYNAME,COUNT(*) AS count_times, EXTRACT (MONTH FROM b.Timebooked ) AS MONTHS
FROM BookingTable b
JOIN FacilityTable f ON b.FACILITYNO = f.FACILITYNO
WHERE ( TO_CHAR(b.Timebooked , 'YYYY') = 2018
AND f.FACILITYNAME = 'Toilet') OR f.FACILITYNAME = 'Science Lab' OR f.FACILITYNAME = 'Biology Lab'
GROUP BY (EXTRACT (MONTH FROM b.Timebooked )),f.FACILITYNAME
ORDER BY (EXTRACT (MONTH FROM b.Timebooked ));