是否可以在HAVING子句后使用WHERE子句?
我想到的第一件事是子查询,但我不确定.
PS如果答案是肯定的,你能举一些例子吗?
我正在根据列X对结果进行分组,并且我希望返回组中具有最高列Y值的行.
SELECT *
FROM mytable
GROUP BY col1
HAVING col2 >= (SELECT MAX(col2)
FROM mytable AS mytable2
WHERE mytable2.col1 = mytable.col1 GROUP BY mytable2.col1)
Run Code Online (Sandbox Code Playgroud)
我想优化上面的查询.没有子查询是否可行?
我找到了解决方案,它比你想象的更简单:
SELECT * FROM (SELECT * FROM mytable ORDER BY col2 DESC) temp GROUP BY col1
Run Code Online (Sandbox Code Playgroud)
在20,000行上运行5毫秒.
我可以用两种方式使用聚合函数编写查询:
select team, count(min) as min_count
from table
group by team
having count(min) > 500
Run Code Online (Sandbox Code Playgroud)
要么
select *
from (
select team, count(min) as min_count
from table
group by team
) as A
where A.min_count > 500
Run Code Online (Sandbox Code Playgroud)
这两种方法是否有任何性能优势,或者它们在功能上是否相同?
以下两个查询产生完全相同的结果:
select country, count(organization) as N
from ismember
group by country
having N > 50;
select * from (
select country, count(organization) as N
from ismember
group by country) x
where N > 50;
Run Code Online (Sandbox Code Playgroud)
每个HAVING
子句都可以用子查询和这样的WHERE
子句替换吗?或者是否存在一个HAVING
条款绝对必要/更强大/更有效/无论什么情况?
我使用Hibernate Criteria API编写了一个查询来获取特定值的总和,现在我需要能够将结果限制为该总和大于或等于特定值的行.
通常我会在我的SQL中使用HAVING子句来执行此操作,但此时Criteria API似乎不支持这一点.
在原始SQL中,这就是我需要它做的事情:
SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk
HAVING amountSum >=50;
Run Code Online (Sandbox Code Playgroud)
我想到的一种解决方法是在FROM子句中使用子查询来获取此求和值,并使用外部查询来使用WHERE子句来限制它.
因此,在原始SQL中它看起来像:
SELECT user_pk, amountSum
FROM (SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk)
WHERE amountSum > 50;
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我如何使用Criteria API,或者我可以用来解决HAVING问题的任何其他建议/解决方法来编写这个方法的正确方向?
这是我对上面示例的Criteria API代码
DetachedCriteria criteria = DetachedCriteria.forClass(Transaction.class,"transaction");
criteria.setProjection(criteria.setProjection(Projections.projectionList().add(
Projections.groupProperty("user.userPK").as("user_pk")).add(
Projections.sum("transaction.amount").as("amountSum")));
Run Code Online (Sandbox Code Playgroud)
谢谢!
这个查询
SELECT
FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, StatTypeId, COUNT(*) AS 'Count'
FROM NCAAstats
INNER JOIN College_Translator
ON College_Translator.AccountID = NCAAstats.AccountId
GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
HAVING COUNT(*) >1
ORDER BY 'Count' DESC
Run Code Online (Sandbox Code Playgroud)
选择我想一个记录集ISValid
位0
.
这些记录是由于输入错误而在我的数据库中出现两次的记录.
我正在寻找类似的东西:
UPDATE NCAAstats
SET IsValid = 0
WHERE (my select statement)
Run Code Online (Sandbox Code Playgroud)
这是在MS SQL SERVER 2008上
谢谢!
好的,所以这里已有几个帖子,网上还有更少的帖子.我真的尝试了每一个,无法得到任何工作.希望有人在这里可以怜悯我:)
这是我正在使用的数据.我想删除所有这些记录.
SELECT
part_desc, count(*) as rec_num
FROM ag_master
GROUP BY part_desc HAVING COUNT(*) > 1000;
+--------------------------------------+---------+
| part_desc | rec_num |
+--------------------------------------+---------+
| SILICON DELAY LINE, TRUE OUTPUT | 1092 |
| LOADABLE PLD | 1401 |
| 8-BIT, FLASH, 8 MHz, MICROCONTROLLER | 1411 |
| FPGA | 1997 |
| 8-BIT, MROM, 8 MHz, MICROCONTROLLER | 3425 |
+--------------------------------------+---------+
5 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我最接近找到可以执行此操作的代码如下所示.语法检查正常并运行,但它似乎只是挂起数据库.我让它运行了长达10分钟,没有任何事情发生,所以我放弃它.
DELETE
FROM ag_master
WHERE part_id IN (
SELECT part_id
FROM ag_master …
Run Code Online (Sandbox Code Playgroud) 我现在只想从几千条记录中选择计数大于1的行(换句话说是重复数据),我主要看到1s,其中有2s和3s在这里和那里
SELECT count( * ) AS `Number` , GI . *
FROM `GeneralInformation` AS GI
GROUP BY `FirstName` , `Surname`
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有三个表:联系人,域和contacts_domains,它们构成了多对多关系.
我想运行一个更新contacts_domains表的查询,但仅适用于只有一个联系人的域.
我知道如何选择我感兴趣的行,但不知道如何更新它们.
SELECT domain_id, contact_id, dominant
FROM contacts_domains
GROUP BY domain_id
HAVING COUNT(contact_id) = 1
Run Code Online (Sandbox Code Playgroud)
我想为所有这些结果设置contacts_domains.dominant = 1.
谢谢!
我有一张桌子:
------------------------
|id|p_id|desired|earned|
------------------------
|1 | 1 | 5 | 7 |
|2 | 1 | 15 | 0 |
|3 | 1 | 10 | 0 |
|4 | 2 | 2 | 3 |
|5 | 2 | 2 | 3 |
|6 | 2 | 2 | 3 |
------------------------
Run Code Online (Sandbox Code Playgroud)
我需要进行一些计算,并尝试在一个非常复杂的请求中进行计算,否则我知道如何使用请求数来计算它.我需要结果表如下:
---------------------------------------------------------
|p_id|total_earned| AVG | Count | SUM |
| | | (desired)|(if earned != 0)|(desired)|
---------------------------------------------------------
| 1 | 7 | 10 | 1 | 30 …
Run Code Online (Sandbox Code Playgroud)