计算多个列

时间:2014-02-04 12:43:14

标签: mysql sql

我有这张桌子:

Teams:
ID | Size1 | Size2 | Size3 | Size4 | ... (other columns)..
----------------------------------------
1  |  L    |  XL   |   L   |   M   | ...
----------------------------------------
2  |  S    |  L    |   S   |  XXL  | ...
----------------------------------------
3  |  M    |  XXL  |   L   |   M   | ...
----------------------------------------
4  |  L    |  XL   |  XS   |  XXL  | ...

计算表中所有 L 的最有效(也是最简单)的MySQL查询是什么?

我希望结果中只有一个字段,即所有列中所有 L 的计数。

编辑: 只是为了澄清一点,在我的表中,第一列有152个Ls,第二列有2个,第三个有151个,第四个有3个,我期待308个结果

4 个答案:

答案 0 :(得分:4)

您可以使用SUMCASE来执行此操作:

SELECT 
  sum(case when Size1 = 'L' then 1 else 0 end) +
  sum(case when Size2 = 'L'  then 1 else 0 end) +
  sum(case when Size3 = 'L'  then 1 else 0 end) +
  sum(case when Size4 = 'L'  then 1 else 0 end)
FROM Teams;

替代CASE,您可以使用IF

SELECT 
  sum(IF(Size1 = 'L',1, 0)) +
  sum(IF(Size2 = 'L',1, 0)) +
  sum(IF(Size3 = 'L',1, 0)) +
  sum(IF(Size4 = 'L',1, 0))
FROM Teams;

这实际上是一样的。

修改

根据Andomar的评论,甚至还有更简单的解决方案:

SELECT 
  sum(Size1 = 'L') +
  sum(Size2 = 'L') +
  sum(Size3 = 'L') +
  sum(Size4 = 'L')
FROM Teams;

这是正确的,因为true在MySQL中等于1。我刚刚验证了这个。 ; - )

第二次修改

简化此操作的下一步 - 仅使用一个SUM

   SELECT sum(
      (Size1 = 'L') + 
      (Size2 = 'L') +
      (Size3 = 'L') +
      (Size4 = 'L') )
    FROM Teams;

答案 1 :(得分:1)

假设每行只能有一个'L'

select  count(*)
from    YourTable
where   'L' in (Size1, Size2, ..., SizeN)

或规范化解决方案,每行支持多个'L'

select  count(*)
from    (
        select  size1 as size
        from    YourTable
        union all 
        select  size2
        from    YourTable
        union all 
        select  size3
        from    YourTable
        union all 
        ...
        )
where   size = 'L'

答案 2 :(得分:1)

请尝试以下查询:

SELECT sum( 
  IF(Size1='L', 1, 0) + 
  IF(Size2='L', 1, 0) + 
  IF(Size3='L', 1, 0) + 
  IF(Size4='L', 1, 0)
) as total FROM Teams

答案 3 :(得分:0)

你的WHERE条件会非常大,但你可以使用它:

SELECT count(Size1) + count(size2) AS total WHERE size1 = 'L' OR size2 = 'L'

此解决方案将根据各列比较计算所有列和总数。