Mysql запрос отображения группы данных - PullRequest
0 голосов
/ 01 июня 2018

Привет, у меня есть этот sql ниже

data

CREATE TABLE data
    (id int, name varchar(9), room varchar(9), paid varchar(9));

INSERT INTO data
    (id, name, room, paid)
VALUES
    (1, 'jane', 'room1','0'),
    (2, 'any', 'room2', '1'),
    (3, 'mandy', 'room2', '1'),
    (4, 'vivian', 'room2', '1'),
    (5, 'amber', 'room3', '1'),
    (6, 'fany', 'room4', '1'),
    (7, 'diana', 'room4', '0');

query

SELECT 
  data.room, COUNT(data.id) as total
FROM 
  data
WHERE 
  data.paid = 0
GROUP BY
  data.room

образец ссылки sqlfiddle

результат сейчас

room 1 = 1 
room 4 = 1

результат, который я хочу

room 1 = 1
room 2 = 0
room 3 = 0
room 4 = 1

Любой может помочь мне, спасибо

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Насколько я понимаю, вы хотите перечислить все комнаты с общим количеством неоплаченных счетов за каждую из них.Вы можете использовать вложенный выбор следующим образом:

    SELECT 
    d1.room, 
    (SELECT COUNT(d2.room) FROM data d2 WHERE d1.room = d2.room and d2.paid = 0)   as total
    FROM 
        data d1
    GROUP BY
        d1.room

Sql Fiddle здесь

0 голосов
/ 01 июня 2018
SELECT 
  data.room, SUM(CASE WHEN data.paid = '0' THEN 1 ELSE 0 END) as total
FROM 
  data
GROUP BY
  data.room

См. SQLFiddle

0 голосов
/ 01 июня 2018

cdaiga ответ правильный, но зависит от ваших значений (наличие 0 и 1 позволяет вам выполнить трюк SUM).В общем случае вы хотите присоединить к исходной таблице слева таблицу, в которой указаны WHERE и GROUP BY.

SELECT DISTINCT original.room, IFNULL(pr.total, 0) AS total
FROM data original LEFT OUTER JOIN (
    SELECT 
      data.room as paidrooms, COUNT(data.id) as total
    FROM 
      data
    WHERE
      data.paid = 0
    GROUP BY
      data.room
) as pr on original.room = pr.paidrooms

Ссылка на SQLFiddle

0 голосов
/ 01 июня 2018
SELECT 
  data.room, SUM(data.paid = 0) as total
FROM 
  data
GROUP BY
  data.room;

См. Демонстрацию по SQL Fiddle .

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