首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询的GROUP BY部分中的布尔逻辑

MySQL查询的GROUP BY部分中的布尔逻辑
EN

Stack Overflow用户
提问于 2012-01-25 04:28:25
回答 2查看 5.5K关注 0票数 4

我目前有一个customers表,其中有重复的客户。我想选择一个唯一的客户列表,没有重复的家庭电话或手机。

因此,如果任何客户拥有与另一个客户相同的家庭电话或移动电话,那么我希望不从查询中返回该客户。

一个警告--如果家用电话或手机是空的,那么我显然不想在防重复的逻辑中计算它,因为一些客户只有一部家用电话,或者只有一部手机。

下面是我的当前查询,它返回唯一的家用电话和移动电话行。

代码语言:javascript
复制
SELECT id, firstname, lastname, homephone, cellphone, city, state, zip, 
country, FROM customers WHERE (homephone != "" OR cellphone != "")
GROUP BY homephone, cellphone

有什么想法吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-25 08:01:03

您必须将所有电话号码集中到一个评估中,并按此对其进行排序/分组。

试试这个:

代码语言:javascript
复制
SELECT id, firstname, lastname, homephone, cellphone, city, state, zip, country
FROM customers
WHERE homephone != '' OR cellphone != ''
GROUP BY case when homephone = '' then cellphone else homephone end

它将获得每个唯一值"homephone,但如果为空则cellphone“的第一行。

票数 2
EN

Stack Overflow用户

发布于 2012-01-25 04:59:29

如果两个客户具有相同的非空家庭电话或相同的非空手机,则此查询将丢弃具有较大id的那个

代码语言:javascript
复制
SELECT id, firstname, ...
  FROM customers c1
 WHERE (c1.homephone != '' OR c1.cellphone != '')
   AND (    c1.homephone = ''
         OR NOT EXISTS
             ( SELECT 1
                 FROM customers c2
                WHERE c2.id < c1.id
                  AND c2.homephone = c1.homephone
             )
       )
   AND (    c1.cellphone = ''
         OR NOT EXISTS
             ( SELECT 1
                 FROM customers c3
                WHERE c3.id < c1.id
                  AND c3.cellphone = c1.cellphone
             )
       )
;

请注意,如果客户X与客户Y具有相同的家庭电话,但与客户Z具有相同的手机,则这可能会给出病理结果。

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

https://stackoverflow.com/questions/8993647

复制
相关文章

相似问题

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