Mysql Group по статье помощи - PullRequest
       17

Mysql Group по статье помощи

1 голос
/ 19 сентября 2011

$ construct = "SELECT * FROM mytable GROUP BY nid, имеющей nid> 1";

    mytable:
+----+----------+
| id |    nid   |
+----+----------+
|  1 |     null |
|  2 |        1 |
|  3 |        1 |
|  4 |        1 |
|  5 |        2 |
|  6 |        2 |
|  7 |        3 |
|  8 |        3 |
|  9 |        4 |
| 10 |        4 |
-----------------

Как мне GROUP BY nid, кроме nid = 1? Это краткий пример, но с моим кодом я не получаю желаемых результатов. Является ли запрос правильным для того, что я пытаюсь выполнить?

Ответы [ 3 ]

1 голос
/ 19 сентября 2011
SELECT count(*), nid FROM mytable where nid <> 1 GROUP BY nid;

или

SELECT count(*), nid FROM mytable where nid != 1 GROUP BY nid;

Не уверен, используете ли вы Oracle или MySQL.

1 голос
/ 19 сентября 2011

Как насчет этого:

SELECT * FROM mytable WHERE nid != 1 ORDER BY nid

GROUP BY вызывает агрегатный запрос, который вы можете использовать только с функцией агрегирования. Например, SELECT COUNT(*), nid GROUP BY nid даст вам количество строк с данным nid.

Обновление: Не уверен, что я вас понимаю, но как насчет этого:

(SELECT * FROM mytable WHERE nid = 1 UNION SELECT * FROM mytable WHERE nid != 1 GROUP BY nid) ORDER BY nid

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

0 голосов
/ 19 сентября 2011
…
GROUP BY CASE nid WHEN 1 THEN -id ELSE nid END
…
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...