簡體   English   中英

根據兩個條件條件為每個唯一 ID 返回不同值的多個 COUNT 字段

[英]Return multiple COUNT fields for distinct values per a unique ID based on two criteria conditions

我正在嘗試使用 MySQL 中的一些日志記錄數據,我希望能夠告訴每個人,不同的成功請求、不同的不成功請求、非不同的成功請求和非不同的不成功請求的數量都符合額外的全球標准。

以下是代表原始表的組成數據示例:

+--------------+--------+---------------+----------+------+
| request_date | client |    request    | response | site |
+--------------+--------+---------------+----------+------+
| 10/30/2018   | Amy    | RE_food       |      200 | MD   |
| 10/30/2018   | Amy    | RE_food       |      200 | MD   |
| 10/30/2018   | Amy    | RE_transport  |      200 | MD   |
| 10/30/2018   | Amy    | RE_assistance |      404 | MD   |
| 10/30/2018   | Amy    | OA_assistance |      404 | MD   |
| 10/30/2018   | Bob    | RE_food       |      200 | MD   |
| 10/30/2018   | Dan    | RE_food       |      404 | MD   |
| 10/30/2018   | Dan    | RE_food       |      404 | SE   |
| 10/30/2018   | Mike   | RE_transport  |      200 | SE   |
| 10/30/2018   | Sally  | RE_food       |      404 | SE   |
| 10/30/2018   | Sally  | OA_food       |      404 | MD   |
| 10/30/2018   | Zeb    | RE_assistance |      404 | MD   |
| 10/30/2018   | Zeb    | OA_assistance |      404 | MD   |
+--------------+--------+---------------+----------+------+

我想寫一個返回的查詢

+--------+-----------+------------+----------+-----------+
| client | unique_OK | unique_404 | total_OK | total_404 |
+--------+-----------+------------+----------+-----------+

其中唯一意味着只計算不同的客戶端、請求、響應分組。 它會返回結果

+--------+-----------+------------+----------+-----------+
| client | unique_OK | unique_404 | total_OK | total_404 |
+--------+-----------+------------+----------+-----------+
| Amy    |         2 |          1 |        3 |         1 |
| Bob    |         1 |          0 |        1 |         0 |
| Dan    |         0 |          1 |        0 |         1 |
| Mike   |         0 |          0 |        0 |         0 |
| Sally  |         0 |          0 |        0 |         0 |
| Zeb    |         0 |          1 |        0 |         1 |
+--------+-----------+------------+----------+-----------+

(請注意,為了清楚地了解該過程,上面顯示了所有四列中計數為 0 的客戶端;如果它們不包含在響應中也可以。)

我嘗試了這樣不起作用的查詢,但希望它對我正在嘗試做的事情有意義:

SELECT client AS person, 
COUNT(DISTINCT request WHERE response = '200') AS unique_OK, 
COUNT(DISTINCT request WHERE response = '404') AS unique_404 
COUNT(WHERE response = '200') as total_OK,
COUNT(WHERE response = '404') as total_404
FROM transactions 
WHERE request like '%RE%' and site = MD and DATE_FORMAT(request_date, '%Y%m%d')='20181030';

使用條件聚合:

select
    client,
    count(distinct case when response = 200 then request end) unique_ok,
    count(distinct case when response = 404 then request end) unique_404,
    sum(response = 200) total_ok,
    sum(response = 404) total_404
from mytable
where 
    request like '%RE%'
    and site = 'MD' 
    and request_date = '2018-10-30'
group by client

DB Fiddle 上的演示

| client | unique_ok | unique_404 | total_ok | total_404 |
| ------ | --------- | ---------- | -------- | --------- |
| Amy    | 2         | 1          | 3        | 1         |
| Bob    | 1         | 0          | 1        | 0         |
| Dan    | 0         | 1          | 0        | 1         |
| Zeb    | 0         | 1          | 0        | 1         |

暫無
暫無

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

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