這是我正在處理的小推銷員表:
------- -------------- --------
| empId | name | gender |
------- -------------- --------
| 3 | Suresh Raina | M |
| 5 | Andrew | M |
| 7 | Moeen | F |
| 11 | Moeen | M |
------- -------------- --------
我必須在查詢中顯示以下內容:
name count
Andrew 1
Moeen 2 (7,Moeen,F)(11,Moeen,M)
Suresh Raina 1
如果 count 有多個匹配名稱,則它會顯示所有屬性。
我有以下查詢,但它沒有列印計數高于 1 的查詢。
select all name, count( name) AS totalNumber
from Salesman GROUP BY name HAVING COUNT(name)= 1 OR COUNT(name)>1 IN
( select group_concat(empId ,name , gender) from Salesman group by name ) order by name asc;
您可以分享的任何提示或想法將不勝感激。
uj5u.com熱心網友回復:
嘗試這個。
詢問
select
name,
count(*) as count,
case when count(*) < 2 then ''
else
concat('(',
group_concat(
concat_ws(',', empid, name, gender)
separator '),('
),
')'
)
end as flds
from salesman
group by name
結果
姓名 | 計數 | 風濕病 :----------- | ----: | :---------------------- 安德魯 | 1 | 摩恩 | 2 | (7,Moeen,F),(11,Moeen,M) 蘇雷什·雷納 | 1 |
例子
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=9a804f0ac1a7290af61ce3649670358c
解釋
從這個開始:
select name, count(*) as counter
from salesman
group by name
這給你名字和計數。這一切都很好。
現在,您想要組合這些欄位。所以,你可以使用concat_ws. 該函式的第一個引數將是分隔符。我們將使用,. 然后將是欄位串列。
因此,concat_ws(',', name, gender)將回傳John,M或每行中的任何名稱。我們將利用這一點。
由于我們想將 concat_ws 與 count(*) 一起使用,因此我們需要對 concat_ws 進行某種總結。我們使用 group_concat 來做到這一點。
select name, count(*) as counter, group_concat(concat_ws(',', empid, name, gender))
from salesman
group by name
給我們
name | counter | group_concat(concat_ws(',', empid, name, gender))
:----------- | ------: | :------------------------------------------------
Andrew | 1 | 5,Andrew,M
Moeen | 2 | 7,Moeen,F,11,Moeen,M
Suresh Raina | 1 | 1,Suresh Raina,M
Alright, we are closer. Now, we give group_concat a separator. That separates the records. We use the separate ),( so that the query becomes like this:
select name, count(*) as counter,
group_concat(concat_ws(',', empid, name, gender) separator '),(')
from salesman
group by name
gives
> <pre>
> name | counter | group_concat(concat_ws(',', empid, name, gender) separator '),(')
> :----------- | ------: | :----------------------------------------------------------------
> Andrew | 1 | 5,Andrew,M
> Moeen | 2 | 7,Moeen,F),(11,Moeen,M
> Suresh Raina | 1 | 1,Suresh Raina,M
> </pre>
Even closer. All we have left is to add open and closed parenthesis around our group concat. Once we do that, we get a clean output.
However, we don't want Andrew and Suresh's information to be published because their count is 1. So, we put a case when ... else ... end statement.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328742.html
標籤:mysql
上一篇:欄位串列中的PHP未知列但表存在
