![](/img/trans.png)
[英]How to count one occurrence from multiple colums of the same table MySQL?
[英]How to count total occurrence from one table with another table
表格1:
ID | 姓名 | 類型 | 開始 | 結尾 |
---|---|---|---|---|
90 | TR1092 | 一個 | 02-12-2019 | 02-12-2019 |
120 | TR1096 | 一個 | 02-16-2019 | 02-16-2019 |
101 | TR1096 | 一個 | 02-22-2019 | 02-22-2019 |
34 | TR1092 | 一個 | 02-22-2019 | 02-22-2019 |
1 | DR9209 | 一個 | 02-12-2019 | 02-12-2019 |
20 | DR9209 | 一個 | 02-13-2019 | 02-13-2019 |
67 | DR8703 | 一個 | 02-11-2019 | 02-11-2019 |
99 | DR8703 | 一個 | 02-11-2019 | 02-11-2019 |
145 | FR2435 | 一個 | 02-11-2019 | 02-11-2019 |
147 | FR2345 | 一個 | 02-16-2019 | 02-16-2019 |
148 | FR2347 | 一個 | 02-16-2019 | 02-16-2019 |
表 2( SessID
與Table 1
中的ID
匹配):
會話ID | 行動 |
---|---|
090 | 推 |
090 | 拉 |
090 | 推 |
120 | 推 |
034 | 拉 |
034 | 拉 |
148 | 拉 |
148 | 踢 |
148 | 拉 |
020 | 拉 |
067 | 拉 |
067 | 推 |
067 | 沖床 |
001 | 拉 |
147 | 踢 |
147 | 推 |
148 | 拉 |
099 | 踢 |
099 | 推 |
我寫了一個查詢,它為我提供了Table 1
中每個Name
的總計數:
Select
CASE
WHEN T1.Name LIKE 'TR%' THEN 'Town Row'
WHEN T1.Name LIKE 'DR%' THEN 'Doctor Row'
WHEN T1.Name LIKE 'FR%' THEN 'Fruit Row'
END AS Name
, COUNT(*) AS 'NameTotals'
From
NamedRecord T1
Where
T1.Type = 'A'
AND
T1.Start >= DATEADD(MONTH, DATEDIFF(Month,0,Getdate(),0)
AND
T1.End <= DATEADD(Day,1,Getdate())
Group by
(
CASE
WHEN T1.Name LIKE 'TR%' THEN 'Town Row'
WHEN T1.Name LIKE 'DR%' THEN 'Doctor Row'
WHEN T1.Name LIKE 'FR%' THEN 'Fruit Row'
END
)
Order By
Name
結果:
姓名 | 名稱總計 |
---|---|
鎮街 | 4 |
醫生行 | 4 |
水果行 | 3 |
如何更新我的查詢,以便我有一列:
WhatHappTotals
- 通過將Table 2
中的SessID
匹配到ID
,然后匹配到Table 1
中的Name
來計算操作總數結果將如下所示:
姓名 | 名稱總計 | WhatHappTotals |
---|---|---|
鎮街 | 4 | 6 |
醫生行 | 4 | 8 |
水果行 | 3 | 6 |
CREATE TABLE One (
ID int NOT NULL PRIMARY KEY,
Name varchar(6) NOT NULL,
Type varchar(1) NOT NULL,
Start datetime NOT NULL,
End datetime NOT NULL
)
CREATE TABLE Two (
SessId int NOT NULL PRIMARY KEY,
Action varchar(5) NOT NULL,
CONSTRAINT Two_FK_One FOREIGN KEY (SessId) REFERENCES One (ID)
)
SELECT Name,
COUNT(DISTINCT ID) AS NameCount,
COUNT(*) AS WhatHappTotal
FROM (
SELECT o.ID, o.Type, o.Start, o.End
CASE
WHEN o.Name LIKE 'TR%' THEN 'Town Row'
WHEN o.Name LIKE 'DR%' THEN 'TDoctor Row'
WHEN o.Name LIKE 'FR%' THEN 'TFruit Row'
ELSE NULL
END AS Name,
t.Action
FROM One o
INNER JOIN Two t ON t.SessId = o.ID
) T
GROUP BY Name
SELECT
CASE
WHEN NR.Name LIKE 'TR%' THEN 'Town Row'
WHEN NR.Name LIKE 'DR%' THEN 'Doctor Row'
WHEN NR.Name LIKE 'FR%' THEN 'Fruit Row'
END AS Name,
COUNT(NR.ID) AS "NameTotals",
COUNT(SI.SessID) AS "WhatHappTotals"
FROM NameRecord AS NR
JOOIN SessionId AS S1 on SI.SessID = NR.ID
AND
NR.Type = 'A'
AND
NR.Start >= DATEADD(MONTH, DATEDIFF(Month,0,Getdate(),0)
AND
NR.End <= DATEADD(Day,1,Getdate())
Group By Name
Order By Name;
你能試試看它是否有效嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.