【问题标题】:mysql distinct query based off non unique columns基于非唯一列的mysql不同查询
【发布时间】:2012-11-03 05:15:10
【问题描述】:

我有一个奇怪的(可能是糟糕的表格设计)查询问题,我想不出一个简单的方法来解决。

这是一个和我一样的表格布局:

| id                 | int(11)     | NO   | PRI | NULL    | auto_increment | 
| num                | varchar(15) | YES  | MUL | NULL    |                | 
| type               | varchar(4)  | YES  |     | NULL    |                | 

type 其实是 enum("val1","val2","blah")

num 表中可以有 3 个条目,每个条目对应 3 种不同的类型。

我需要的查询是具有“val1”和“val2”条目的不同数量的“num”的计数。

我认为没有一个简单的查询可以处理这个问题。但我想出的唯一解决方案是将 val1 的不同条目转储到内存表中,将 val2 的不同条目转储到内存表中。

然后确定哪个表的记录数最少。然后根据较小的表编写一个子查询,在较大的表中查找数量匹配。

虽然上面的内容听起来很糟糕......

我在这里遗漏了什么...你们有没有找到更好的方法来做到这一点?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    select count(*)
    from `MyTable`
    where `type` in ('val1', 'val2')
    group by `num`
    having count(distinct `type`) = 2
    

    【讨论】:

    • 谢谢,这几乎可以工作,它给了我正确的输出,但我只需要计数。无论哪种方式,您都使我免于编写显然不需要的愚蠢子程序。
    • 找到另一个解决方案...我不知道您可以在同一张表上进行连接...从 mytable 中选择 count(distinct a.num) 作为连接 mytable as b on a.num = b.num 其中 a.type = "val1" 和 b.type = "val2"
    • @trey85stang 您可以进行自联接,但速度要慢得多,而且您必须对每个值进行联接,因此规模非常大。想象一下包含 100 个值的列表...
    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2023-03-18
    相关资源
    最近更新 更多