簡體   English   中英

在MySQL查詢中對記錄的子集執行一些算術運算

[英]Performing some arithmetic operations inside a MySQL query on a subset of records

我有一個包含考勤記錄的MySQL表。 相關列標識與會者,會話和出席狀態(已確認/已拒絕/無響應)。 我還有第二張表,其中包含與會者的個人信息,包括他們加入該組的日期。

我正在嘗試構建一個查詢,該查詢將輸出所有與會者的列表,他們參加會議的次數及其規律性,以他們參加會議的百分比(相對於會議總數)表示。 問題在於,自與會者加入組以來,會話總數僅應包含會話。

因此,對於第一部分,我的查詢是:

SELECT name, count(*)
FROM attendance, members
WHERE attendance.attend = 2 and
      attendance.member_number = members.number
GROUP BY attendance.member_number, attendance.attend
HAVING count(*) > 0
ORDER BY count(*) desc

這將返回所有與會者的姓名,以及每個與會者已參加的會議數。 但是,我也想添加第三列。

因此,對於每條記錄,我首先必須找出什么是member.member_since日期,然后僅查詢日期大於member_since的每個成員的出勤記錄組,獲取其計數,然后從該子集中獲取atteneance.attend = 2的計數,然后計算該子集計數的百分比代表第二個計數(具有出席人數的記錄= 2)。

如何編寫查詢?

數據如下所示:

表成員:

number, name, join_date
001, Peter James, 2016-07-26
002, John Smith, 2014-06-04

表出席:

member_number, attend, date
001, 2, 2019-05-11
001, 1, 2019-05-04
001, 2, 2019-04-26
001, 2, 2019-04-18
002, 2, 2014-08-01
002, 1, 2016-08-01
002, 1, 2019-05-04

期望的結果將是獲得以下結果:

Name, Attended, percentage
Peter James, 3, 75%
John Smith, 1, 14%

換句話說,雖然有6次會議,但彼得·詹姆斯只參加了最近四次會議,並參加了其中的3次(75%),而約翰·史密斯從一開始就一直是成員,所以他的出席是六分之一。

該結構有所簡化(有一個“會話”表,其中包含有關會話的詳細信息,包括日期,“出勤”表引用其關鍵列“ att_number”,而不是實際日期),但重點是相同。

僅在日期上加入表,以獲取自成員加入以來的會話總數。 然后,使用條件SUM()獲取成員參加的會話數。 除以得到百分比。

SELECT m.name, SUM(m.number = a.member_number AND a.attend = 2) AS attendance, 100*SUM(m.number = a.member_number AND a.attend = 2)/COUNT(*) AS percent
FROM members AS m
JOIN attendance AS a ON a.date >= m.member_since
GROUP BY m.number
ORDER BY attendance DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM