想要在count(*)或count(distinct *)之间选择一些东西

时间:2015-05-23 01:02:51

标签: mysql

假设我有一张桌子 与

列1

        A 
        A
        A
        B
        B
        C
        C
        C

列2

        CH 
        FH
        FH 
        BW
        CH
        AW

现在:我想要一个选择...... - >结果列1和列2的6种不同组合。 如果我说选择计数(第2列):我会采取8.我不想要它。 如果我说选择(不同的第2列):我将采取5.我也不想要它。

我寻找的6种不同结果是:A-QW,A-CH,B-FH,C-BW,C-CH,C-AW 我正在寻找组合。 你能告诉我吗?

3 个答案:

答案 0 :(得分:1)

使用GROUP BY子句:

SELECT Column1,Column2 FROM  tblname GROUP BY Column1,Column2

答案 1 :(得分:0)

分组将满足您的需求。它可以方便地为您删除重复项。

select column1, column2
  from <your_table>
  group by column1, column2

很确定这会做你想要的。 demo here

根据评论进行更新

select count(*) from (
    select column1, column2
      from <your_table>
      group by column1, column2
) q

updated demo

答案 2 :(得分:0)

在某些情况下,我们可以使用一个结合了两列的表达式......

举个例子:

SELECT COUNT(DISTINCT CONCAT(t.column1,'-',t.column2)) AS cnt_combinations
  FROM mytable t

这仅适用于特殊情况,我们知道短划线字符不会作为column1column2中的字符包含在内。添加该分隔符也不是必需的。

在更一般的情况下,这不会产生&#34;正确的&#34;结果如果列的内容包含像。

这样的值
column1  column2  CONCAT(column1,'-',column2)
-------  -------  ---------------------------
A        -CW      A--CW
A-       CW       A--CW

由于表达式的结果是相同的值,因此不会将这些值视为不同的值。

NULL值会发生同样的情况,因为只要任何参数值为CONCAT()NULL就会返回NULL

例如,使用字符串NULL表示NULL值

column1  column2  CONCAT(column1,'-',column2)
-------  -------  ---------------------------
NULL     CW       NULL
A        NULL     NULL