计算SQL表

时间:2016-07-21 03:43:57

标签: mysql sql-server count group-by

我无论如何都不是SQL专家所以请原谅我这是否过于简单化。我有一个存储客户品牌选择的表,他们可以选择最多两个品牌。我需要计算单个品牌条目和组合,但我遇到麻烦我需要看一下+ b与b + a相同的组合。到目前为止,我已经:

SELECT DISTINCT brand, brand2, count(*) FROM table GROUP BY brand, brand2;

这让我得到了这个表的输出和"期望"是我想要的

     table                  output                        desired

brand | brand2|      brand | brand2| count(*)|    brand | brand2| count(*)|
  a   |   b   |        a   |   b   |     1   |      a   |   b   |     2   |
  b   |       |        b   |       |     2   |      b   |       |     2   |
  c   |   b   |        c   |   b   |     1   |      c   |   b   |     2   |
  b   |       |        b   |   a   |     1   |      e   |       |     1   |
  b   |   a   |        b   |   c   |     1   |
  b   |   c   |        e   |       |     1   |
  e   |       |

我希望这很清楚,我真的只是在这里被封锁了。不确定如何获得我需要的输出。我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

试试这个:

function addScheme($url, $scheme = 'http://'){
    return parse_url($url, PHP_URL_SCHEME) === null ? $scheme . $url : $url;
}
// parse the html
$dom = new DOMDocument;
$dom->loadHTML($text);
// make sure links are correct
$a_tags = $dom->getElementsByTagName('a');
foreach ($a_tags as $a) {
    // make sure that links start with http(s)
    $a->setAttribute('href', addScheme($a->getAttribute('href')));
}
// save parsed version
$text = $dom->saveHTML();

SqlFiddle Demo

答案 1 :(得分:1)

这是一种使用标准sql的方式。

select
    case when brand >= brand2 and brand2 <>'' then brand2 else brand end as `brand`,
    case when brand >= brand2 and brand2 <>'' then brand else brand2 end as `brand2`,
    count(*)
from yourtable
group by 1,2               
order by 1,2

fiddle here