SQL语法咨询:查询指定城市发票是否需GROUP BY及WHERE条件写法
SQL问题解答
需求翻译
查找账单城市为Brasilia、Edmonton和Vancouver的所有发票,并按invoiceid降序排列。
疑问解答
1. 是否需要使用GROUP BY子句?
不需要。GROUP BY的作用是对查询结果做分组聚合(比如统计每个城市的发票总数),而你的需求只是筛选出符合条件的所有发票记录,不需要任何聚合计算,所以完全用不到GROUP BY。
2. WHERE子句中多个城市条件应使用AND还是逗号?
这两种方式都不对。多城市筛选的正确做法是用IN关键字指定允许的城市列表:
- 用AND的话,会要求账单城市同时等于多个不同值,逻辑上不可能成立,自然查不到结果
- WHERE子句里不能用逗号连接条件,这属于语法错误,所以才会报错
修正后的SQL语句
你当前的语句还有两处语法错误:SELECT子句末尾多了一个逗号,WHERE子句缺少条件判断逻辑。修正后的正确语句如下:
SELECT invoiceid, customerid, billingcity FROM invoices WHERE billingcity IN ('Brasilia', 'Edmonton', 'Vancouver') ORDER BY invoiceid DESC;
关键说明
IN ('Brasilia', 'Edmonton', 'Vancouver'):指定账单城市是这三个值中的任意一个,这是多值筛选最简洁的写法ORDER BY invoiceid DESC:按invoiceid降序排列,DESC表示降序,默认不写的话是升序(ASC)
内容的提问来源于stack exchange,提问作者Tammy
相关产品推荐
相关产品推荐

