Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL dzieli wyniki z wielu podzapytań z wieloma wierszami

Oto jeden ze sposobów, w jaki możesz wykonać całość za pomocą następującego zapytania:

SELECT 
(dividendTable.messages / divisorTable.messages) AS result
FROM
(
    SELECT 
    firstTable.messages,
    @rn1 := @rn1 + 1 AS row_number
    FROM 
    (
        SELECT
            COUNT(channel) AS messages
        FROM Chats
        WHERE   message LIKE '%word%'
        GROUP BY    UNIX_TIMESTAMP(time) DIV 3600
    ) FirstTable, (SELECT @rn1 := 0) var1
) AS dividendTable
INNER JOIN
(   
    SELECT 
    secondTable.messages,
    @rn2 := @rn2 + 1 AS row_number
    FROM
    (
        SELECT 
            COUNT(channel) AS messages 
        FROM Chats 
        GROUP BY UNIX_TIMESTAMP(time) DIV 3600
    ) secondTable, (SELECT @rn2 := 0) var2
) AS divisorTable
ON dividendTable.row_number = divisorTable.row_number;

Uwaga:

Jeśli chcesz, aby wynik był zaokrąglany do 2 cyfr po przecinku, użyj następującego jako pierwszego wiersza zapytania:

SELECT
ROUND((dividendTable.messages / divisorTable.messages),2) AS result

Tutaj prezentacja

Uwaga: W zapytaniu nie użyto żadnego ORDER BY. Możesz uzyskać przypadkowe zachowanie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z ról, które zmieniły się w MySQL 8.0?

  2. Prawidłowa obsługa długich danych w Hibernate

  3. Co oznacza symbol ( '> ) w wierszu poleceń w MySQL?

  4. uzyskaj według szerokości i długości geograficznej w laravelu 5 z innymi złączami

  5. Błąd składni SQL w pobliżu opisu