#mysql
#mysql
Вопрос:
У меня есть небольшой совет из SQL. Мне нужно выбрать две группы (ГДЕ) в двух столбцах. Некоторые рабочие «как»:
SELECT COUNT(WHERE Draw=1) as D1, COUNT(WHERE Draw=2) as D2 FROM SampleData
Пример таблицы данных:
SampleData
--------------------
Id | Draw | Element
--------------------
1 | 1 | 13
2 | 1 | 15
3 | 1 | 22
4 | 1 | 36
5 | 1 | 45
6 | 2 | 11
7 | 2 | 15
8 | 2 | 22
И выводим следующим образом:
Output:
--------
D1 | D2
--------
5 | 3
Комментарии:
1. Извините, но в чем здесь вопрос?
Ответ №1:
Вы можете использовать CASE
выражение для этого:
SELECT
COUNT(CASE WHEN Draw=1 THEN 1 END) as D1,
COUNT(CASE WHEN Draw=2 THEN 1 END) as D2
FROM SampleData
mysql также поддерживает If()
, поэтому вы также могли бы сделать что-то вроде следующего. Просто имейте в виду, что это не переносимо на другие СУБД, но CASE
версия:
SELECT
SUM(IF(Draw=1, 1, 0)) as D1,
SUM(IF(Draw=2, 1, 0)) as D2
FROM SampleData;
Также … mysql поддерживает математику для логических выражений, так что здесь вы могли бы быть действительно краткими:
SELECT SUM(Draw=1) as D1, Sum(Draw=2) as D2 FROM SampleData;
Опять же, хотя это не переносимо в другие СУБД, как CASE
выражение.
Комментарии:
1. Выглядит не очень элегантно, но воркс! 🙂 Большое спасибо!
Ответ №2:
Может быть, что-то вроде этого? (непроверенный)
SELECT COUNT(*) as D1 FROM SampleData WHERE Draw = 1 UNION SELECT COUNT(*) as D2 FROM SampleData WHERE Draw = 2
Комментарии:
1. Это привело бы к выводу двух записей с одним столбцом, где OP хочет получить одну запись с двумя столбцами. Однако более тревожным является то, что в случае, если количество записей, где
draw=1
иdraw=2
одинаковое, это приведет к выводу только одной записи. В любом сценарии имя столбца будет таким,D1
что также будет трудно различить, какая запись являетсяD1
записью, а какаяD2
записью.2. да, но это не может позволить мне группировать и where для всех подгрупп в одном месте