我试图使用一些基本的SQL函数.我需要获得一些数据的平均值并按降序排序.我得到的错误是"不允许组功能"
表:
STUDENTS
-----------
ID
CLASS
GRADE
ROOM
Run Code Online (Sandbox Code Playgroud)
SQL:
SELECT ID, class, AVG(Grade) AS AvgGrade
FROM Students
GROUP BY AVG(Grade)
HAVING AVG(Grade) >= 3.0
ORDER BY AVG(Grade) DESC
Run Code Online (Sandbox Code Playgroud)
我被告知ORDER BY不能与HAVING子句一起使用,我需要重复该功能.有帮助吗?
所以,我认为这相当简单,但我搞砸了一些事情。
我有疑问
SELECT AVG(price), food_type
FROM instructor
GROUP BY food_type
Run Code Online (Sandbox Code Playgroud)
产生这个:
Price | food_type |
2.25 | Drink |
1.50 | Candy |
3 | Soup |
Run Code Online (Sandbox Code Playgroud)
我正在尝试退回所有超过 2 美元的价格
所以我想要:
Price | food_type |
2.25 | Drink |
3 | Soup |
Run Code Online (Sandbox Code Playgroud)
看起来应该很简单
SELECT AVG(price), food_type
FROM instructor
WHERE AVG(price) > 2
GROUP BY food_type
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用。
我究竟做错了什么?
我有一个包含两列'id'和'layout plan'的表
我需要查看具有相同布局规划的所有行
我用这个查询.
select *
from project_layout
group by layout_plan
having count(layout_plan) > 1
Run Code Online (Sandbox Code Playgroud)
但是这个查询只返回第一行.
我想看到所有具有相同布局规划的组.
我想在具有不同过滤器的同一字段上的查询中的'Amount'字段上使用SUM()函数4次.
就像是
SELECT Date1,CC,BU, SUM(Amount),SUM(Amount),SUM(Amount),SUM(Amount)
FROM MainTable<br>
GROUP BY CC,BU,Date1
Run Code Online (Sandbox Code Playgroud)
这里
第一个SUM(Amount)应该被计算时,Mode='011' 而Mode='012'从MainTable
第二次SUM(Amount)时,应计算Mode like '03_'而Mode Like '05_'从MainTable
3 SUM(Amount)时,应计算Mode like '10_'从MainTable
4日SUM(Amount)应计算时(Mode !='011'),并(Mode !='012') (Mode not Like '03_')和(Mode not Like '05_')来自MainTable
如何实现这一目标?我在很多方面尝试过,但无法按照我想要的方式得到结果.
请帮我.
先感谢您.
sql group-by aggregate-functions sql-server-2008 having-clause
customer price date
123 100 1-Jan-15
321 200 2-Jan-15
123 10 3-Jan-15
123 50 4-Jan-15
321 150 5-Jan-15
123 100 6-Jan-15
123 300 7-Jan-15
321 500 8-Jan-15
123 700 9-Jan-15
Run Code Online (Sandbox Code Playgroud)
我想按客户查看 1 月 3 日和 1 月 7 日日期之间的 SUM(Price)
就像是:
select customer,sum(price) from table group by customer
having date between 3-Jan-2015 and 8-Jan-2015
Run Code Online (Sandbox Code Playgroud)
这提示我date在selectorgroup by子句中有一个。当我包含它时,它也按日期分组。
期望的输出是:
123 460
Run Code Online (Sandbox Code Playgroud) 我有以下查询按保险类型显示计数.这是查询:
;WITH CTE
AS
(
SELECT DISTINCT ROW_NUMBER() OVER (Partition by PatInfo.PatientProfileID Order By E.Visit desc) AS RowNumber,
PatInfo.PatientProfileID, E.Visit, PatInfo.Zip, E.CarrierTypeDesc, E.FinancialClassDescription, IG.UDSInsuranceGroupName,IG.UDSInsuranceID
FROM Encounter E JOIN CHCEncounterType ET ON E.CHCEncounterTypeID = ET.CHCEncounterTypeID
JOIN PatientInfo PatInfo ON PatInfo.PatientProfileID = E.PatientProfileID
LEFT JOIN dbo.UDSInsuranceMapping ON ISNULL(dbo.UDSInsuranceMapping.InsuranceName,'') = ISNULL(E.FinancialClassDescription,'')
LEFT JOIN dbo.UDSInsuranceGroups IG ON IG.UDSInsuranceID = dbo.UDSInsuranceMapping.UDSInsuranceID
WHERE E.EncounterCounted = 1
)
SELECT Zip AS ZipCode,
Count(PatientProfileID) as Total, UDSInsuranceGroupName, UDSInsuranceID
from CTE
where RowNumber = 1 AND ZIP IS NOT …Run Code Online (Sandbox Code Playgroud) 例子:
SELECT customer_id, address_id as addressID
FROM customer
WHERE addressID = 5
Run Code Online (Sandbox Code Playgroud)
但是,使用 HAVING 子句效果非常好。那么为什么别名在 where 子句中不起作用呢?
这是用于销售火车票的未完成的数据库。
我想在路由表中为 RouteId 创建主键,但出现异常:
CREATE UNIQUE INDEX 语句终止,因为找到了对象名称“dbo.Route”和索引名称“PK_Route”的重复键。重复的键值为 (1)。
但是没有另一个键。
我认为问题可能是最初我有 2 个表 Route 和 RouteStation,然后我删除了表 Route 并将 RouteStation 重命名为 Route。
本网站上的另一个主题对我没有帮助。我还尝试查看此表的键,但输出为空:
SELECT Col.Column_Name from
INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab,
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col
WHERE
Col.Constraint_Name = Tab.Constraint_Name
AND Col.Table_Name = Tab.Table_Name
AND Constraint_Type = 'PRIMARY KEY'
AND Col.Table_Name = 'Route'
Run Code Online (Sandbox Code Playgroud) 我的数据库架构如下所示
table - X有以下3列docid(文档ID),术语(文档中的术语),count(特定docid术语的出现次数)
docid
terms
count
Run Code Online (Sandbox Code Playgroud)
如何提取以下信息.总词数总和超过300的docid数,包括重复词.
我在 Oracle DBMS 中创建了一个具有以下属性的员工表:部门号和薪水。我执行了这个查询:
SELECT deptno, SUM(salary)
FROM emp
GROUP BY deptno
HAVING 1 > 2 ;
Run Code Online (Sandbox Code Playgroud)
我认为 1 和 2 指的是 SELECT 语句中的“deptno”和“SUM(salary)”列。所以我在表中的“deptno”>“SUM(salary)”处放置了一条记录,如下所示:
deptno salary
1001 5000
1002 1000
Run Code Online (Sandbox Code Playgroud)
输出是“未找到行”我期望第二行作为输出。请解释原因。
根据我的理解,GROUP BY将返回2个元组.
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
626-21-1500 BACKPACK 1485.86
Run Code Online (Sandbox Code Playgroud)
平均价格的价值是,
AVG(PRICE)
----------
4858.014444
Run Code Online (Sandbox Code Playgroud)
因此,以下查询应筛选出较小的价格值.
SELECT item_type, MODEL, items.price
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK'
GROUP BY item_type, items.price, MODEL
HAVING ITEMS.PRICE > AVG(ITEMS.PRICE);
Run Code Online (Sandbox Code Playgroud)
所以,输出应该是:
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
Run Code Online (Sandbox Code Playgroud)
但是,实际上,以下是输出:
产量
no rows selected
Run Code Online (Sandbox Code Playgroud) having-clause ×11
sql ×10
group-by ×5
mysql ×2
sql-server ×2
where-clause ×2
average ×1
duplicates ×1
having ×1
oracle ×1
oracle11g ×1
sql-order-by ×1