我必须用错误的方式搜索,或者我有一个愚蠢的时刻.
声明HAVING
和声明之间的区别WHERE
是SQL SELECT
什么?
编辑:我已经将史蒂文的答案标记为正确答案,因为它包含链接上的关键信息:
何时
GROUP BY
不使用,HAVING
表现得像一个WHERE
条款
我见过的WHERE
情况没有GROUP BY
,也是我的困惑开始的地方.当然,在您知道这一点之前,您无法在问题中指定它.
非常感谢所有非常有启发性的答案.
我有以下两个表:
1. Lecturers (LectID, Fname, Lname, degree).
2. Lecturers_Specialization (LectID, Expertise).
Run Code Online (Sandbox Code Playgroud)
我想找到专业化程度最高的讲师.当我尝试这个时,它不起作用:
SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这个时,它有效:
SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
GROUP BY L.LectID,
Fname,
Lname
HAVING COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);
Run Code Online (Sandbox Code Playgroud)
是什么原因?谢谢.
我有一张名为的桌子PAYMENT
.在此表中,我有一个用户ID,一个帐号,一个邮政编码和一个日期.我想查找所有使用相同帐号每天付款多次的用户的所有记录.
更新:此外,应该有一个过滤器,而不是只计算邮政编码不同的记录.
这就是表格的样子:
| user_id | account_no | zip | date | | 1 | 123 | 55555 | 12-DEC-09 | | 1 | 123 | 66666 | 12-DEC-09 | | 1 | 123 | 55555 | 13-DEC-09 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 |
结果看起来应该类似于:
| …
我试图在MySQL中完成以下内容(请参阅pseudo
代码)
SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用WHERE子句中的(SELECT ...)的情况下执行此操作,因为这看起来像是浪费资源.
如何在linq(vb.net)中编写此查询?
select B.Name
from Company B
group by B.Name
having COUNT(1) > 1
Run Code Online (Sandbox Code Playgroud) 我需要在WHERE子句中使用别名,但它一直告诉我它是一个未知的列.有什么方法可以解决这个问题吗?我需要选择评级高于x的记录.评级计算如下:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
Run Code Online (Sandbox Code Playgroud) 我有两张桌子:groups
和group_members
.
该groups
表包含每个组的所有信息,例如其ID,标题,描述等.
在group_members
表中,它列出了每个组的所有成员,如下所示:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
Run Code Online (Sandbox Code Playgroud)
基本上,我想在页面上列出三个组,我只想列出具有四个以上成员的组.在<?php while ?>
循环中,我想要有四个成员,他们是该组的一部分.我没有遇到列出组的麻烦,并将成员列在另一个内部循环中,我只是无法优化组,以便只有超过4个成员的组显示.
有人知道怎么做这个吗?我确信这是MySQL加入的.
我在PostgreSQL中有以下查询:
SELECT
COUNT(a.log_id) AS overall_count
FROM
"Log" as a,
"License" as b
WHERE
a.license_id=7
AND
a.license_id=b.license_id
AND
b.limit_call > overall_count
GROUP BY
a.license_id;
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误:
错误:列"overall_count"不存在
我的表结构:
License(license_id, license_name, limit_call, create_date, expire_date)
Log(log_id, license_id, log, call_date)
Run Code Online (Sandbox Code Playgroud)
我想检查许可证是否已达到特定月份的通话限制.
对于SQL中的这个查询(查找重复项):
SELECT userId, name FROM col GROUP BY userId, name HAVING COUNT(*)>1
Run Code Online (Sandbox Code Playgroud)
我在MongoDB中执行了这个简单的查询:
res = db.col.group({key:{userId:true,name:true},
reduce: function(obj,prev) {prev.count++;},
initial: {count:0}})
Run Code Online (Sandbox Code Playgroud)
我添加了一个简单的Javascript循环来遍历结果集,并执行了一个过滤器来查找count> 1的所有字段,如下所示:
for (i in res) {if (res[i].count>1) printjson(res[i])};
Run Code Online (Sandbox Code Playgroud)
除了在客户端使用javascript代码之外,还有更好的方法吗?如果这是最好/最简单的方式,说它是,这个问题将有助于某人:)
我有这样一张桌子:
+-----+-----+-------+
| id | fk | value |
+-----+-----+-------+
| 0 | 1 | peter |
| 1 | 1 | josh |
| 3 | 2 | marc |
| ... | ... | ... |
Run Code Online (Sandbox Code Playgroud)
我现在想要获得具有多个值的所有条目.预期结果将是:
+-----+-------+
| fk | count |
+-----+-------+
| 1 | 2 |
| ... | ... |
Run Code Online (Sandbox Code Playgroud)
我试图像这样实现:
select fk, count(value) from table where count(value) > 1;
Run Code Online (Sandbox Code Playgroud)
但甲骨文并不喜欢它.
所以我试过这个......
select * from (
select fk, count(value) as cnt from table
) …
Run Code Online (Sandbox Code Playgroud)