這是我用來統計和分組來自不同國家/地區的最近 30 天用戶的 PHP 代碼。
$result = $dbh->query('SELECT country,COUNT(*) FROM data_able WHERE dtime > DATE_SUB(CURDATE(), INTERVAL 31 DAY) GROUP BY country ORDER BY COUNT(country) DESC;');
$i = 1;
foreach ($result as $row) {
${'country' . $i} = $row['country'];
${'count' . $i} = $row['COUNT(*)'];
$i ;
}
echo $count1;
將$count1;
輸出此表中計數最多的國家/地區的計數。我想使用按功能分組來按月(4 月、3 月 - 不是 04/03)獲取資料。我嘗試了很多方法,但似乎沒有一個有效。
這是資料庫示例 db<>fiddle
簡而言之,我不想按國家/地區收集資料組,而是按過去 12 個月的月份(表中每月的總數)收集資料組。并將它們用作$month1;
$month2;
等。
例如
$month1
應該輸出April
(本月)
$month2
應該輸出march
(上個月)
$monthcount1
應輸出1
(僅作為 1 個 tdate 條目)
$monthcount2
應該輸出2
(僅作為 2 個 tdate 條目)
SQL 查詢應該是什么?
uj5u.com熱心網友回復:
如果您只想要 12 個月,您可以使用以下案例陳述句來完成:
SELECT country,
SUM(CASE WHEN MONTH(dtime) = 1 THEN 1 ELSE 0 END) JAN_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 2 THEN 1 ELSE 0 END) FEB_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 3 THEN 1 ELSE 0 END) MAR_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 4 THEN 1 ELSE 0 END) APR_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 5 THEN 1 ELSE 0 END) MAY_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 6 THEN 1 ELSE 0 END) JUN_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 7 THEN 1 ELSE 0 END) JUL_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 8 THEN 1 ELSE 0 END) AUG_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 9 THEN 1 ELSE 0 END) SEP_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 10 THEN 1 ELSE 0 END) OCT_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 11 THEN 1 ELSE 0 END) NOV_TOTAL,
SUM(CASE WHEN MONTH(dtime) = 12 THEN 1 ELSE 0 END) DEC_TOTAL,
count(*) TOTAL
FROM data_able
WHERE
GROUP BY country
ORDER BY COUNT(*) DESC
我不確定你使用的是什么平臺以及dtime的資料型別,所以我沒有填寫WHERE子句過濾到去年。我認為您使用的是 SQL 服務器或等效的,因為您有 CURRDATE() 函式,所以我認為它可能只是 CURRDATE()-365,但我不確定。
uj5u.com熱心網友回復:
如果要顯示特定的資料行,可以使用Ranking函式從資料中獲取特定月份
或者您可以使用Elias 名稱,但我不推薦它
uj5u.com熱心網友回復:
在我看來,您同時提出了多個不同的問題。所以我想說:將接收到的資料應用到 php 中的變數并進一步處理它們是你的作業。我能回答的是如何獲取每月的日期數。假設你的目標是得到這樣的結果......
4 月 1 日、3 月 2 日、2 月 2 日、1 月 2 日、12 月 4 日
...您可以使用 DATENAME 和 COUNT 的構造,條件是“在過去 12 個月內”,按最近一個月排序:
SELECT DATENAME(MONTH,tdate) monthName, COUNT(tdate) counter
FROM data
WHERE tdate >= DATEADD(Month, -12, GETDATE())
GROUP BY DATENAME(MONTH,tdate),(tdate)
ORDER BY tdate DESC;
PS:您鏈接的資料庫示例是 MS SQL 資料庫,因此我也為 MS SQL 撰寫了答案。但是您將 MY SQL 標記為您正在使用的資料庫。你應該注意這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468576.html