2009-12-29 2 views
0

Я задаюсь вопросом, как написать этот запрос, это немного сложнее ...MySQL запросов - Нужна небольшая помощь с группировкой

Это пример того, что хранится в таблице:

KID  Utype Qtype Qname  Resp UID 
Q24-YYY Case T001 HM-99678 N8944 2455 
Q24-YYY Case T001 HM-99678 N8944 9874 
Q24-YYY Case F099 HM-99678 N8944 6554 
Q24-YYY Case F099 HM-99678 SD789 2331 
Q24-YYY Case F099 HM-99678 SD789 1772 
Q24-YYY Case T001 HM-99678 PX667 8897 
Q24-YYY Case F099 HM-99678 PX667 4412 
Q24-YYY Case F099 HM-99678 SD789 6643 
Q24-YYY Case F099 HM-99678 PX667 3221 
Q24-YYY Case T001 HM-99678 SD789 6337 

То, что я пытаюсь сделать, это сначала сгруппировать его по столбцу «Ответ», затем по столбцу «Qtype» и добавить столбец count для Resps ... Таким образом, результат будет выглядеть так:

KID  Utype Qtype Qname  Resp COUNT 
Q24-YYY Case T001 HM-99678 N8944 2 
Q24-YYY Case F099 HM-99678 N8944 1 
Q24-YYY Case T001 HM-99678 SD789 1 
Q24-YYY Case F099 HM-99678 SD789 3 
Q24-YYY Case T001 HM-99678 PX667 1 
Q24-YYY Case F099 HM-99678 PX667 2 

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

ответ

5

Вы должны сгруппировать все столбцы, которые вы не считая:

select KID, Utype, Qtype, Qname, Resp, count(*) 
from YourTable 
group by KID, Utype, Qtype, Qname, Resp 

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

0

Прежде всего, вы не можете в одной группе запросов по одному столбцу, а затем по другому столбцу. Вы устанавливаете группу по множеству. Столбцы в этом наборе не имеют для них порядка. Если вам нужен заказ, который должен быть установлен в порядке заказа.

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

Так что делает Сайм предположения, что (KID, UType, драмы QName всегда определяется Респом и QType)

Select KID, UType, Resp, Qtype, Qname, Count(*) RespCount 
    From Table 
    Group By KID, UType, Resp, Qname, Qtype 
    Order By Resp, QType 
1

Согласно стандарту должны работать этот запрос. (Я знаю, что у MySQL есть несколько вещей, нестандартных в реализации группового предложения, так что это не 100%)

Select distinct Table.*, tmp.Count From 
    (Select Qtype, Resp, count(*) AS Count From table Group By Resp, Qtype) tmp 
    Join Table ON Table.Qtype = tmp.Qtype and Table.Resp = tmp.Resp 
Смежные вопросы