有這樣一條陳述句:
select name,action,priority,groupid,count(*) as count from users where clock > 1598198400 group by name,action,priority,groupid order by count desc
查詢結果,基本上是我需要的內容了,但是有一個問題。
比如 name 張三,這個人,他同時是1組和2組的成員?所以他的 groupid 是 1和2,這條陳述句的結果重復顯示了,把張三1組和張三2組都顯示了,也就說結果里邊有幾條,除了gourpid 不一樣,其他都一樣的條目,總的計數條目就翻倍了,其實不管張三這個人是1組還是2組,都是他,其實我只需要顯示1次,計數1次就可以了,怎么把這條陳述句改一下呢?
uj5u.com熱心網友回復:
SELECT * FROM (
--按groupid 分組加上一個序號
select ROW_NUMBER() OVER(partition by groupid order by groupid) AS No,
name,action,priority,groupid,count(*) as count
from users where clock > 1598198400 group by name,action,priority,groupid
order by count desc) A
WHERE A.No=1 --只取一行
uj5u.com熱心網友回復:
我這邊 mysql 報錯了,這條陳述句貌似是在 oracle 里使用的?uj5u.com熱心網友回復:
select name,action,priority,max(groupid) groupid,count
from
(
select name,action,priority,groupid,count(*) as count
from users where clock > 1598198400
group by name,action,priority,groupid
order by count desc
) tmp
在分組的基礎上,再進行分一次分組,通過max or min函式選 groupid最大或最小的一組即可
uj5u.com熱心網友回復:
你的陳述句執行結果只剩下一條了,也不是我需要的結果。我的原始陳述句顯示這樣的結果。
張三 行動 高級 1組 6次
張三 停止 高級 1組 5次
張三 行動 高級 2組 6次
張三 停止 高級 2組 5次
李四 行動 中級 3組 3次
王五 停止 低級 6組 2次
我希望能顯示這樣的結果。
張三 行動 高級 1組 6次
張三 停止 高級 1組 5次
李四 行動 中級 3組 3次
王五 停止 低級 6組 2次
uj5u.com熱心網友回復:
select tmp1.name,tmp1.action,tmp1.priority,tmp1.groupid,tmp1.count
from
(
select name,action,priority,groupid,count(*) as count
from users where clock > 1598198400
group by name,action,priority,groupid
) tmp1
left join
(
select name,action,priority,min(groupid) min_groupid
from users where clock > 1598198400
group by name,action,priority
) tmp2
on tmp1.name = tmp2.name,
tmp1.action = tmp2.action,
tmp1.priority = tmp2.priority,
tmp1.groupid = tmp2.min_groupid
可以用臨時表的方法來解決
uj5u.com熱心網友回復:
表里沒有count 欄位吧,如果沒有,肯定報錯,先把這個問題給你結局了。select name,action,priority,groupid,count(*) as count from users where clock > 1598198400
group by name,action,priority,groupid order by 5 desc
剛剛你說的張三屬于多個分組,只算一次,按照什么規則,groupid =1的還是groupid =2的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7143.html
標籤:MySQL
上一篇:DB2後臺看不到中文字
下一篇:impala3 安裝問題
