Подсчет уникальных строк в столбце типа enum для вывода еще двух столбцов в mysql - PullRequest
4 голосов
/ 14 ноября 2011

У меня следующая таблица MySQL:

Item Name   Listing Fee Listing Type
watch       $0.20       LISTED
watch       $0.20       LISTED
watch       $0.30       SOLD
glasses     $0.50       LISTED
glasses     $0.50       LISTED
glasses     $0.50       LISTED
glasses     $1.00       SOLD

То, что мне нужно, ниже вывода группы по SQL:

Item Name   Total Fee   Total Listed    Total Sold
watch       $0.70       2       1
glasses     $2.50       3       1

Правило состоит в том, что каждое «Имя предмета» будет иметь несколько записей листинга, где определены гонорар и тип листинга. Может быть два «типа листинга» [LISTED & SOLD].

Я хочу выполнить запрос к таблице и сгенерировать сводку, например, упомянутый вывод.

спасибо Wikki

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011
SELECT
    `Item Name`, 
    SUM(`Listing Fee`) AS `Total Fee`,
    SUM(CASE `Listing Type` WHEN 'LISTED' THEN 1 ELSE 0 END) AS `Total Listed`,
    SUM(CASE `Listing Type` WHEN 'SOLD' THEN 1 ELSE 0 END) AS `Total Sold`
FROM `Table Name`
GROUP BY `Item Name`

Это суммирует список, используя статические «Типы списков». Если вам нужен динамический список, вам придется построить SQL в хранимой процедуре и выполнить его.

Выход:

Item Name   Total Fee   Total Listed   Total Sold
watch       $0.70       2              1
glasses     $2.50       3              1

Вы можете сделать еще один шаг:

SELECT
    `Item Name`,
    SUM(
        CASE `Listing Type`
            WHEN 'LISTED' THEN `Listing Fee`
            ELSE 0
        END
    ) AS `Total Fee Listing`,
    SUM(
        CASE `Listing Type`
            WHEN 'SOLD' THEN `Listing Fee`
            ELSE 0
        END
    ) AS `Total Fee Sold`
FROM `Table Name`
GROUP BY `Item Name`

Выход:

Item Name   Total Fee Listing   Total Fee Sold
watch       $0.40               $0.30
glasses     $1.50               $1.00
2 голосов
/ 14 ноября 2011

Сначала - вы должны сгруппировать эти записи по элементам, затем для подсчета итогов вы можете использовать небольшую хитрость -

SELECT
  `Item Name`,
  SUM(`Listing Fee`) `Total Fee`,
  COUNT(IF(`Listing Type` = 'LISTED', 1, NULL)) `Total Listed`,
  COUNT(IF(`Listing Type` = 'SOLD', 1, NULL)) `Total Sold`
FROM
  mytable
GROUP BY
  `Item Name`;
...