1

次のデータベース スキーマで SQL を構築するのは難しいと思います。

ID

注文

id
shop_id
日付
金額

ショップには多くの注文があることがわかります。特定の日付の各ショップの注文数を示す SQL を作成したいと考えています。したがって、WHERE 部分は (例: 2011-7-13)、

WHERE order.date = '2011-7-13'

SELECT 部分がどうあるべきか考えられません。COUNT(*) を使用する必要があると思いますが、これが私の脳内にあるすべてです。

誰かがこれについていくつかのヒントを教えてください。

皆様、どうもありがとうございました。

4

4 に答える 4

2

これを試して:

SELECT a.id, a.name, COUNT(1) AS order_count
  FROM Shop a INNER JOIN Order b
    ON a.id = b.shop_id
 WHERE `date` = '2011-7-13'
 GROUP BY a.id, a.name
于 2011-07-12T20:09:19.817 に答える
1

これを試して:

SELECT COUNT(Order.id), Shop.name, Order.date
FROM Shop INNER JOIN Order ON Shop.id=Order.shop_id
WHERE Order.date = '$date'
GROUP BY Shop.name, Order.date
ORDER BY Order.date

検証のために結果に日付を含めました。

于 2011-07-12T20:08:47.600 に答える
1
SELECT Shop.name, COUNT(*) AS Num_Orders
FROM Shop JOIN `Order` ON Shop.id = `Order`.id
WHERE DATE(`Order`.`date`) = '2011-7-13'
GROUP BY `Order`.id;

列の場合、関数を使用しdateて時刻ではなく日付部分のみを返すことに注意してください。DATETIMEDATE()

dateandOrderは予約済みの MySQL キーワードであるため、おそらく上記のようにバッククォートで囲む必要があります。そうではないかもしれませんdateが、ほぼ確実Orderです。

于 2011-07-12T20:09:24.673 に答える
1

いくつかの考慮事項(および@AJの当然の発言)の後、これが私の(修正された)答えです。

SELECT shop.id, shop.name,
FROM shop
JOIN (SELECT shop_id, date, COUNT(*)
      FROM order
      WHERE date = :date
      GROUP BY shop_id, date) as order_count
ON order_count.shop_id = shop.id

日付ごとのすべての注文数のリストが必要な場合は、内側のWHERE節を削除してください。

于 2011-07-12T20:34:53.033 に答える