首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL分组和筛选筛选器

MYSQL分组和筛选筛选器
EN

Stack Overflow用户
提问于 2018-03-08 06:17:31
回答 3查看 29关注 0票数 0

所以我有一个衣柜桌子,里面有拥有彩色衬衫的人的记录。就像这样,

代码语言:javascript
复制
================================
| People   |    Shirt          |
================================
| Peter    |    red            |
| Peter    |    green          |
| Peter    |    blue           |
| Peter    |    blue           |
| John     |    red            |
| John     |    green          |
| Kenny    |    yellow         |
| Kenny    |    yellow         |
| Kenny    |    green          |
| Sam      |    yellow         |
| Sam      |    green          |
| Sam      |    purple         |
| Chris    |    red            |
| Chris    |    red            |
================================

我需要帮助查询一个人有多少衬衫,只有红色衬衫。下面的查询很接近,但不是我想要的。

代码语言:javascript
复制
Select people, count(shirt) from Wardrobe where shirt='red' group by people.

结果是

代码语言:javascript
复制
===========================
| People   | count(shirt) |
===========================
| Peter    |    1         |
| John     |    1         |
| Chris    |    2         |
==========================

我想要从查询中得到的结果会是这样的

代码语言:javascript
复制
===========================
| People   | count(shirt) |
===========================
| Chris    |    2         |
==========================

+++++++++++++++++++++++++++++++++++++++

更新

如果我碰巧连接多个表,并且总记录数以百万计,那么哪种技术会更好、更有效?

EN

回答 3

Stack Overflow用户

发布于 2018-03-08 07:01:57

获取一个人拥有的红色衬衫的总数,将其与衬衫的总数进行比较,因此您只返回这些相同的行。

代码语言:javascript
复制
SELECT People, SUM(Shirt = "red") AS redcount
FROM Wardrobe
GROUP BY People
HAVING redcount = COUNT(*)

或者干脆把穿非红色衬衫的人排除在外:

代码语言:javascript
复制
SELECT People, COUNT(*) AS redcount
FROM Wardrobe
WHERE People NOT IN (
    SELECT People
    FROM Wardrobe
    WHERE Shirt != "red")
GROUP BY People
票数 1
EN

Stack Overflow用户

发布于 2018-03-08 07:08:27

更长的版本:)

代码语言:javascript
复制
select w.people, w.cnt
from (
Select people,count(shirt) as cnt
from Wardrobe 
where shirt = 'red'
group by people) w
join (
  select people, count(shirt) as d_cnt 
  from Wardrobe 
  group by people) t
on w.people = t.people  and w.cnt = t.d_cnt
票数 1
EN

Stack Overflow用户

发布于 2018-03-08 07:48:18

您必须使用子查询。

选择人员,计数(*)作为总数(从衣柜中选择DISTINCT * FROM WHERE =‘red’按人分组);

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49162116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档