MySQL AVG столбцы для Google Charts - PullRequest
2 голосов
/ 11 июля 2019

Итак, для диаграммы Google мне нужны мои данные в следующем формате:

+--------+---------+---------+---------+
| Month  | Store A | Store B | Store C |
+--------+---------+---------+---------+
| May-19 |     9.5 |     9.4 |     8.8 |
| Jun-19 |     7.9 |     9.4 |     7.2 |
| Jul-19 |       9 |     9.3 |     8.8 |
+--------+---------+---------+---------+

Я пытаюсь отформатировать свой SQL-запрос, чтобы справиться с этим:

    SELECT
    DATE_FORMAT(d.date_submitted,'%b-%y') AS 'Month',
    s.name as 'Store',
    FORMAT(AVG(d.q1),1) AS 'Satisfaction'
    FROM data d
    INNER JOIN store_list s ON d.store_list=s.store_id
    WHERE d.store_list IN (1,2,3)
    GROUP BY store_list, YEAR(d.date_submitted), MONTH(d.date_submitted)
    ORDER BY store_list,YEAR(d.date_submitted) ASC, MONTH(d.date_submitted) ASC

Это дает мне данные, но макет неправильный.

+--------+---------+--------------+
| Month  |  Store  | Satisfaction |
+--------+---------+--------------+
| May-19 | Store A |          9.5 |
| Jun-19 | Store A |          7.9 |
| Jul-19 | Store A |            9 |
| May-19 | Store B |          9.4 |
| Jun-19 | Store B |          9.4 |
| Jul-19 | Store B |          9.3 |
| May-19 | Store C |          8.8 |
| Jun-19 | Store C |          7.2 |
| Jul-19 | Store C |          8.8 |
+--------+---------+--------------+


Гугл дал мне это в качестве опции, которую можно использовать в макете Google, но данные совершенно неверны:

    SELECT  
    DATE_FORMAT(date_submitted,'%b-%y') AS 'Month', 
    IF(store_list=1,FORMAT(AVG(q1),1),NULL) AS 'Store A',
    IF(store_list=2,FORMAT(AVG(q1),1),NULL) AS 'Store B',   
    IF(store_list=3,FORMAT(AVG(q1),1),NULL) AS 'Store C'
    FROM data
    GROUP BY YEAR(date_submitted), MONTH(date_submitted)    
    ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC
+--------+---------+---------+---------+
| Month  | Store A | Store B | Store C |
+--------+---------+---------+---------+
| NULL   | NULL    | NULL    | NULL    |
| May-19 | 8.8     | NULL    | NULL    |
| Jun-19 | 8.7     | NULL    | NULL    |
| Jul-19 | NULL    | 9.2     | NULL    |
+--------+---------+---------+---------+

Я предполагаю, что IF и AVG не очень хорошо играют вместе, но не уверен, как еще я собираюсь привести свои данные в правильное расположение ..

[править]

Для одного магазина, который я сейчас использую:

<?php 
    $sql = "SELECT COUNT(*) as Base, DATE_FORMAT(date_submitted,'%b-%y') AS 'Month', FORMAT(AVG(q1),1) AS 'Satisfaction' FROM data WHERE store_list IN (" . $user_stores . ") GROUP BY YEAR(date_submitted), MONTH(date_submitted) ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";          

    $Sat = mysqli_query($conn,$sql);
    while($row = mysqli_fetch_array($Sat)){
        echo "['".$row['Month']."',".$row['Satisfaction'].",'Satisfaction: ".$row['Satisfaction']."\\nBase: ".$row['Base']."'],";
    }
?>

, который хорошо работает с моим кодом Google Chart, я не очень много знаю PHP (подобранный в Google), такможет быть, есть другой способ, которым я мог бы передать вывод MySQL в Google Charts - чтобы я мог вернуть массив с рабочим кодом, а затем вписать этот массив в то, что нужно Google вне SQL?

1 Ответ

1 голос
/ 11 июля 2019

Ах, мои IF были снаружи AVG, а не внутри:

SELECT
    DATE_FORMAT(date_submitted,'%b-%y') AS 'Month',
    FORMAT(AVG(CASE WHEN store_list = 1 THEN q1 ELSE NULL END),1) AS 'Store A',
    FORMAT(AVG(CASE WHEN store_list = 2 THEN q1 ELSE NULL END),1) AS 'Store B',
    FORMAT(AVG(CASE WHEN store_list = 3 THEN q1 ELSE NULL END),1) AS 'Store C'
FROM data
WHERE store_list IN (1,2,3)
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC

Это дает мне:

+--------+---------+---------+---------+
| Month  | Store A | Store B | Store C |
+--------+---------+---------+---------+
|May-19  |      9.5|      9.4|      8.8|
|Jun-19  |      7.9|      9.4|      7.2|
|Jul-19  |        9|      9.3|      8.8|
+--------+---------+---------+---------+

Теперь, чтобы разобраться, как создавать базы и динамически вставлять соответствующие хранилища в каждой точке И делать это для N хранилищ ... никогда не кончается, да, надеюсь, это кому-нибудь поможет!

...