【问题标题】:MySQL distinct values across columnsMySQL 跨列的不同值
【发布时间】:2011-09-28 13:47:34
【问题描述】:

我有下表:

id lb rb ls rs ch bk ot 1 10000 10001 10001 10001 10001 10001 10000 2 0 10000 0 10001 0 10000 0 3 0 0 10000 10001 10000 0 0 4 0 0 0 10000 0 0 0 5 0 0 0 10000 0 0 0

我希望能够获得所有列(不包括 0)的总不同值,因此结果如下:

代码数量 10000 8 10001 7

最简单/最好的方法是什么?

谢谢,斯图

【问题讨论】:

    标签: mysql distinct multiple-columns


    【解决方案1】:

    你可以的

    SELECT col1, COUNT(*)
    FROM
      (
      SELECT lb AS col1
      FROM table
        UNION ALL 
      SELECT rb
      FROM table
        UNION ALL ... etc
      ) a
    WHERE col1 != 0
    GROUP BY col1
    

    您可以将 WHERE field_name !=0 添加到 UNION 中的每个 SELECT,而不是 WHERE col1 != 0

    【讨论】:

    • 恐怕会抛出错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') WHERE col1 != 0 GROUP BY col1'
    • 我认为这可能与“)a”有关。我真的不明白为什么...尝试删除它。如果这仍然不起作用,您可以显示您的完整查询吗?
    【解决方案2】:
    SELECT code     AS Code
         , SUM(cnt) AS Qty
    FROM
      (   SELECT lb AS code
               , COUNT(*) AS cnt
          FROM TableX
          GROUP BY lb        
      UNION ALL
          SELECT rb AS code
               , COUNT(*) AS cnt
          FROM TableX
          GROUP BY rb
      UNION ALL        
        ...
      UNION ALL
          SELECT ot AS code
               , COUNT(*) AS cnt
          FROM TableX
          GROUP BY ot
      ) AS tmp
    GROUP BY code
    

    【讨论】:

    • 谢谢,但我收到Every derived table must have its own alias 错误:(
    • 立即尝试。我在正确的位置添加了括号。我唯一没有放的是WHERE col <> 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多