web-dev-qa-db-fra.com

COUNT SELECTS multiples à partir de la même table dans une seule requête

Pour certaines personnes, cela peut sembler très simple, mais je ne peux tout simplement pas l'obtenir.
J'ai plusieurs requêtes MS-SQL SELECT de la même table encore et encore:

SELECT count(Page) as tAEC
FROM someTable
WHERE Page LIKE '%AEC%'

le prochain

SELECT count(Page) as tTOL
FROM someTable
WHERE Page LIKE '%TOL%'

etc...

Quelle serait la manière la plus efficace d'écrire cette requête. J'ai googlé un tas de questions similaires, mais je ne pouvais pas en faire fonctionner. Donc, toute aide est grandement appréciée.

24
crashtestxxx
SELECT sum(case when Page LIKE '%AEC%' then 1 end) as tAEC, 
    sum(case when Page LIKE '%TOL%' then 1 end) as tTOL 
FROM someTable 
64
RedFilter

Vous pouvez utiliser un GROUP BY Page

SELECT
  Page
, COUNT(Page) as "nb"
FROM someTable
GROUP BY Page

Vous pouvez également faire un GROUP BY CASE...

SELECT
  CASE
    WHEN Page LIKE '%AEC%' THEN "AEC"
    WHEN Page LIKE '%TOL%' THEN "TOL"
    ELSE ""
  END AS "type"
, count(Page) as "nb"
FROM someTable
GROUP BY type

Vous pouvez également COUNT IF

SELECT
  COUNT(IF(Page LIKE '%AEC%', 1, NULL) THEN "AEC"
, COUNT(IF(Page LIKE '%TOL%', 1, NULL) THEN "TOL"
FROM someTable
6
Pierre de LESPINAY