SQL : How to find number of occurrences without using HAVING or COUNT?

标签 sql

这是一个简单的示例,但我试图了解如何使用 SQL 进行创造性思考。

例如,我有下表,我想查询有三个或更多问题的姓名。如何在不使用 HAVINGCOUNT 的情况下执行此操作?我想知道使用 JOINS 或类似的东西是否可以实现这一点?

各位

folkID      name
----------  --------------
01          Bill
02          Joe
03          Amy
04          Mike
05          Chris 
06          Elizabeth 
07          James 
08          Ashley 

问题

folkID      questionRating questionDate
----------  ----------     ----------
01          2              2011-01-22
01          4              2011-01-27
02          4
03          2              2011-01-20
03          4              2011-01-12
03          2              2011-01-30
04          3              2011-01-09
05          3              2011-01-27
05          2              2011-01-22
05          4
06          3              2011-01-15
06          5              2011-01-19
07          5              2011-01-20
08          3              2011-01-02

最佳答案

使用 SUMCASE 对我来说似乎是作弊!

我不确定您当前的表述是否可行,但如果您向问题表添加主键 (questionid),则以下内容似乎有效:

SELECT DISTINCT Folks.folkid, Folks.name
FROM ((Folks 
  INNER JOIN Question AS Question_1 ON Folks.folkid = Question_1.folkid) 
  INNER JOIN Question AS Question_2 ON Folks.folkid = Question_2.folkid) 
  INNER JOIN Question AS Question_3 ON Folks.folkid = Question_3.folkid
WHERE (((Question_1.questionid) <> [Question_2].[questionid] And 
        (Question_1.questionid) <> [Question_3].[questionid]) AND
        (Question_2.questionid) <> [Question_3].[questionid]);

抱歉,这是 MS Access SQL 中的内容,但它应该转换为任何类型的 SQL。

返回:

folkid  name
3       Amy
5       Chris

更新:只是为了解释为什么它有效。每次加入都会返回该人提出的所有问题 ID。然后,where 子句仅留下问题 ID 的唯一行。如果询问的问题少于三个,则不会有唯一的行。

例如,比尔:

folkid  name  Question_3.questionid  Question_1.questionid  Question_2.questionid
1       Bill  1                      1                      1
1       Bill  1                      1                      2
1       Bill  1                      2                      1
1       Bill  1                      2                      2
1       Bill  2                      1                      1
1       Bill  2                      1                      2
1       Bill  2                      2                      1
1       Bill  2                      2                      2

不存在所有 id 都不同的行。

但是对于艾米来说:

folkid  name  Question_3.questionid  Question_1.questionid  Question_2.questionid
3       Amy   4                      4                      5
3       Amy   4                      4                      4
3       Amy   4                      4                      6
3       Amy   4                      5                      4
3       Amy   4                      5                      5
3       Amy   4                      5                      6
3       Amy   4                      6                      4
3       Amy   4                      6                      5
3       Amy   4                      6                      6
3       Amy   5                      4                      4
3       Amy   5                      4                      5
3       Amy   5                      4                      6
3       Amy   5                      5                      4
3       Amy   5                      5                      5
3       Amy   5                      5                      6
3       Amy   5                      6                      4
3       Amy   5                      6                      5
3       Amy   5                      6                      6
3       Amy   6                      4                      4
3       Amy   6                      4                      5
3       Amy   6                      4                      6
3       Amy   6                      5                      4
3       Amy   6                      5                      5
3       Amy   6                      5                      6
3       Amy   6                      6                      4
3       Amy   6                      6                      5
3       Amy   6                      6                      6

有几行具有不同的 id,因此上面的查询会返回这些行。

关于SQL : How to find number of occurrences without using HAVING or COUNT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199128/

相关文章:

mysql - 从一个表中选择记录并添加到表2中,将最后插入的ID更新到表1中

android sqlite 如何按时间排序

Mysql - 我可以获取子选择结果并在 WHERE 子句中使用它吗?

sql - MySQL - FK 在 Web 应用程序中有用/可行吗?

c# - 在不使用导航属性的情况下添加相关实体

mysql逆序获取记录

sql - 自动删除和重新创建当前索引

php - 在其他 sql 语句中使用 sql 语句结果

mysql - 如何将整个字符串小写,在 MYSQL 中保持第一个大写

SQlite 查询更新列并替换值