Как мне сделать подгруппу в MySQL? - PullRequest
2 голосов
/ 03 февраля 2012

Допустим, у меня есть этот набор данных:

id   city   result fruit
1    boston good   apple
2    boston bad    banana
3    ny     good   peach
4    ny     good   banana
5    ny     good   apple
6    ny     bad    apple
...

Итак, представьте, что этот набор данных продолжается и дает результаты для любого количества фруктов и любого количества городов.Проблема в том, что я не знаю, как выполнить запрос, чтобы получить такие результаты:

city   fruit   good   bad
ny     bananna 3      2
ny     apple   1      3
ny     peach   3      2
boston banana  2      5
boston peach   2      1
...

Идея состоит в том, что мы группируемся по двум вещам: по городу и по фруктам, но я хочучтобы получить только количество фруктов в каждом городе.Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Вы сводите свои данные. Самый простой способ, который я знаю в этом случае, это

  • GROUP в столбцах city и fruit
  • Используйте CASE, чтобы определить, является ли запись хорошей или плохой
  • SUM эти результаты

Оператор SQL

SELECT city
       , fruit
       , SUM(CASE WHEN result = 'good' THEN 1 ELSE 0 END) AS good
       , SUM(CASE WHEN result = 'bad' THEN 1 ELSE 0 END) AS bad
FROM   Fruits
GROUP BY
       city
       , fruit
1 голос
/ 03 февраля 2012
SELECT City, Fruit,
       SUM(CASE WHEN Result = 'good' THEN 1 ELSE 0 END) AS Good,
       SUM(CASE WHEN Result = 'good' THEN 0 ELSE 1 END) AS Bad
  FROM DataSet
 GROUP BY City, Fruit
1 голос
/ 03 февраля 2012

Эта техника обычно называется "опорой":

select
    city,
    fruit,
    sum(result = 'good') as good,
    sum(result = 'bad') as bad
from mytable
group by 1,2

Обратите внимание на элегантное использование sum(condition) вместо мирского sum(case...)

Отредактировано

Как обычно, люди не могут не делать критических / не относящихся к делу комментариев, поэтому для протокола ...

Подход sum(condition) работает для любой базы данных, которая обрабатывает true как 1 и false как 0. Mysql - одна из таких баз данных, таким образом, это подходящий ответ для вопроса, помеченного mysql. Пробег может отличаться от других баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...