Многократный выбор с той же таблицей в MySQL не работает

У меня проблема с множественным выбором моей базы данных. Мне нужно сделать выборку, которая возвращает вид таблицы с некоторыми обработанными данными, и ее нужно упорядочить по дням месяца. Чтобы сделать это, я использую вопрос множественного выбора mysql. Это мой код:

SELECT 
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1                                                                                AS 'Total',
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1 and `status` = 0 and `status_cancel` = 0                                       AS 'Open',
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1 and `status_cancel` = 1                                                        AS 'Cancel',
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1 and `date_finish` is not null and `status_cancel` = 0                          AS 'Finish',
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1 and `result` >= 0 and  `date_finish` is not null and `status_cancel` = 0       AS 'Win',
    (SELECT COUNT( * ) FROM `table` WHERE `type`=1 and `result` < 0 and `date_finish` is not null and `status_cancel` = 0         AS 'Loss'

Теперь он возвращает сумму всех строк в моей таблице, но я не могу этого сделать, чтобы вернуть данные сгруппированные по дням, помогите мне, пожалуйста!

Результат должен быть таким:

Результат, который мне нужен

1 ответ

Решение

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

SELECT  DATE(date_finish) as `date`, count(*) as 'Total', 
        SUM(CASE WHEN `status` = 0 AND `status_cancel` = 0 THEN 1 ELSE 0 END) as 'Open',
        SUM(CASE WHEN `status_cancel` = 1 THEN 1 ELSE 0 END) as 'Cancel',
        SUM(CASE WHEN `date_finish` is not null and `status_cancel` = 0 THEN 1 ELSE 0 END) as 'Finish',
        SUM(CASE WHEN `result` >= 0 AND `date_finish` is not null AND `status_cancel` = 0 THEN 1 ELSE 0 END) as 'Win',
        SUM(CASE WHEN `result` < 0 AND `date_finish` is not null AND `status_cancel` = 0 THEN 1 ELSE 0 END) as 'Loss'
from `table` 
WHERE `type` = 1 
group by DATE(date_finish)

ТЕСТ: http://rextester.com/HCRIU11065

Другие вопросы по тегам